2 个版本
0.0.2 | 2021 年 8 月 2 日 |
---|---|
0.0.1 | 2021 年 6 月 29 日 |
#2141 in 算法
150KB
3K SLoC
pushgen
处理范围和数据流的推式设计模式。
这是基于 Rust 的设计模式,由 transrangers 描述。虽然链接的讨论针对的是 C++,但基于拉式迭代器的相同基本原理也适用于 Rust(由于 Rust 没有像 C++ 那样的 end
迭代器概念,因此需要进行一些修改)。
示例
fn process(x: i32) { /*...*/ }
let data = [1, 2, 3, 4, 5];
for item in data.iter().filter(|x| *x % 2 == 0).map(|x| x * 3) {
process(item);
}
可以重写为
use pushgen::{SliceGenerator, GeneratorExt};
fn process(_x: i32) { /*...*/ }
let data = [1, 2, 3, 4, 5];
SliceGenerator::new(&data).filter(|x| *x % 2 == 0).map(|x| x * 3).for_each(process);
性能
我不做性能声明,但是有一些经过基准测试的案例表明,基于推式的方案在某些情况下优于迭代器方案,但我没有深入分析这一点。