7个版本 (破坏性更新)
使用旧的Rust 2015
0.8.1-rc1 | 2021年5月24日 |
---|---|
0.8.0 | 2021年5月24日 |
0.7.0 | 2020年6月12日 |
0.6.0 | 2020年1月2日 |
0.3.0 | 2016年6月14日 |
807 在 Rust模式 中排名
每月下载量132次
在 4 个crate中使用(通过 osmio)
30KB
433 行
iter-progress
包装迭代器,并在执行时获取进度数据。一个更高级的 .enumerate()
文档
包装迭代器,并在执行时获取进度数据。一个更高级的 .enumerate()
用法
在任意的Iterator上调用 .progress()
,将得到一个新的迭代器,该迭代器生成 (ProgressRecord, T)
,其中 T
是原始值。一个 ProgressRecord
有许多有用的方法来查询迭代器的当前状态
在每次迭代中,计算当前时间。对于每秒生成大量项目的迭代器,这可能会造成可感知的性能损失。使用 .optional_progress(N)
生成一个新的迭代器,该迭代器生成 (Option<ProgressRecord>, T)
。每N个项目,结果将是 (Some(ProgressRecord), T)
,否则返回 (None, T)
,并且不调用获取当前时间。
示例
use iter_progress::ProgressableIter;
// Create an iterator that goes from 0 to 1,000
let my_iter = 0..1_000;
let mut progressor = my_iter.progress();
// This new iterator returns a struct with the current state, and the inner object returned by
// the iterator
let (state, number) = progressor.next().unwrap();
assert_eq!(number, 0);
// We can now use methods on `state` to find out about this object
// If we know the size of the iterator, we can query how far we are through it
// How far through the iterator are we. 0 to 1
assert_eq!(state.fraction(), Some(0.001));
// We are 0.1% the way through
assert_eq!(state.percent(), Some(0.1));
另一种用法
use iter_progress::ProgressableIter;
let my_big_vec = vec![false; 100];
for (state, val) in my_big_vec.iter().progress() {
// Every 1 second, execute this function with the the `state`
state.do_every_n_sec(1., |state| {
println!("{}% the way though, and doing {} per sec.", state.percent().unwrap(), state.rate());
});
// Do something to process `val`
}
.do_every_n_sec
是一种“尽力而为”的尝试。它是单线程的,所以如果上一次调用该函数的时间已经超过N秒,它将被调用。.do_every_n_items
在每N个项目时被调用。