3 个不稳定版本
0.2.0 | 2021 年 1 月 18 日 |
---|---|
0.1.1 | 2021 年 1 月 14 日 |
0.1.0 | 2021 年 1 月 14 日 |
1468 在 算法 中
7KB
94 行
unfold
Rust 中的简单展开实现
展开 允许你创建一个迭代器,从给定的初始值开始,对当前状态应用给定的函数,将结果存储到下一次迭代中,并返回当前状态。
展开定义了一个无限迭代器:你必须手动停止它,就像示例中那样。
示例
use unfold::Unfold;
// Create a vector containing the first 5 numbers from the Fibonacci
// series
let fibonacci_numbers: Vec<u64> = Unfold::new(|(a, b)| (b, a + b), (0, 1))
.map(|(a, _)| a)
.take(5) //Unfold iterator never stops.
.collect();
assert_eq!(vec![0, 1, 1, 2, 3], fibonacci_numbers);
lib.rs
:
unfold
展开函数接受一个函数 f 和一个初始值 i,返回一个列表,定义为 [i, f(i), f(f(i)), ...]。
该库定义了 Unfold
结构体,它将展开函数作为无限迭代器实现。
快速开始
使用 Unfold
非常简单。用户调用新函数,提供函数作为第一个参数和初始值作为第二个参数。然后可以使用 Unfold
实例作为任何迭代器,但不要忘记:展开永远不会结束,必须停止它。
以下是一个示例
use unfold::Unfold;
// Create a vector containing the first 5 numbers from the Fibonacci
// series
let fibonacci_numbers: Vec<u64> = Unfold::new(|(a, b)| (b, a + b), (0, 1))
.map(|(a, _)| a)
.take(5) //Unfold iterator never stops.
.collect();
assert_eq!(vec![0, 1, 1, 2, 3], fibonacci_numbers);