7个版本 (破坏性更新)

使用旧的Rust 2015

0.8.1-rc12021年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日

807Rust模式 中排名

Download history 26/week @ 2024-03-24 55/week @ 2024-03-31 26/week @ 2024-04-07 21/week @ 2024-04-14 25/week @ 2024-04-21 29/week @ 2024-04-28 25/week @ 2024-05-05 28/week @ 2024-05-12 60/week @ 2024-05-19 37/week @ 2024-05-26 25/week @ 2024-06-02 25/week @ 2024-06-09 43/week @ 2024-06-16 30/week @ 2024-06-23 11/week @ 2024-06-30 45/week @ 2024-07-07

每月下载量132次
4 个crate中使用(通过 osmio

AGPL-3.0

30KB
433

iter-progress

Build Status Crates.io Documentation

包装迭代器,并在执行时获取进度数据。一个更高级的 .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个项目时被调用。

无运行时依赖