8个版本 (稳定)
1.2.4 | 2022年7月30日 |
---|---|
1.2.2 | 2022年7月9日 |
0.1.0 | 2022年7月6日 |
在算法类别中排名第1560
每月下载量24次
9KB
167 行
你有回调(以及迭代器难以处理的其它情况)并且厌倦了将它们.collect()
到Vecs
中吗?有一个解决方案。
Buter
- 带有流体缓冲区的缓冲迭代器,用作所有迭代的存放位置
使用方法
fn callback_work<F>(mut f: F)
where
F: FnMut(usize),
{
for i in 0..10_000 {
f(i);
}
}
use buter::Buter;
struct Worker {
buf: Buter<usize>,
// ...
}
impl Worker {
fn work(&self) -> impl Iterator<Item = usize> + '_ {
let mut writer = self.buf.writer();
callback_work(|i| writer.extend(Some(i)));
writer.into_iter()
}
}
基准测试
这既适用于大量结果,也适用于少量结果
// buter bench: 14 ns/iter (+/- 5)
// vec_push bench: 212 ns/iter (+/- 130)
// vec_push_with_capacity bench: 54 ns/iter (+/- 32)
// buter time: [1.6348 ms 1.6445 ms 1.6549 ms]
// vec_push time: [4.4204 ms 4.4750 ms 4.5360 ms]
// vec_push_with_capacity time: [2.6034 ms 2.6338 ms 2.6680 ms]
依赖项
~0.5–5.5MB
~13K SLoC