#iterator-adapter #iterator #adapter #collect

no-std iterextd

此特质提供了一些额外的迭代器操作方法,增强了其功能

7 个版本 (重大更改)

新版本 0.6.0 2024 年 8 月 16 日
0.5.0 2024 年 6 月 6 日
0.4.1 2024 年 5 月 17 日
0.3.0 2024 年 3 月 25 日
0.1.0 2024 年 2 月 13 日

#526 in 算法

Download history 272/week @ 2024-05-12 41/week @ 2024-05-19 148/week @ 2024-06-02 12/week @ 2024-06-09 1/week @ 2024-06-16 6/week @ 2024-06-30 27/week @ 2024-07-07

每月 <468 次下载

MITGPL-3.0-or-later

80KB
1.5K SLoC

iterextd

扩展 Iterator 功能的适配器。

示例用法

变量步长

use iterextd::IterExtd;

let logic_fn = |s: &mut usize| { if *s == 0 { *s = 1; 1 } else { *s += 1; *s } };
let iter = (0..18).step_by_fn(logic_fn);
let vec = iter.collect::<Vec<_>>();
assert_eq!(vec, vec![0, 2, 5, 9, 14]);

收集零数组

use iterextd::IterExtd;

let arr = [1u8, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let iter = arr.iter().filter(|elem| *elem % 2 == 0).copied();
let arr: (usize, [u8; 10]) = iter.collect_arr_zeroed();
assert_eq!(arr, (5, [2, 4, 6, 8, 10, 0, 0, 0, 0, 0]));

从数组中收集窗口。

use iterextd::IterExtd;

let arr = [0, 1, 2, 3, 4, 5, 6, 7];
let iter = arr.into_iter();
let iter = iter.clone().map_iters(iter.previous(1).skip(2), |self_iter, arg_iter| {
    let (pre_elem, elem) = arg_iter.next()?;
    Some([self_iter.next()?, pre_elem, elem])
});
let vec = iter.collect::<Vec<_>>();
assert_eq!(vec, vec![[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5 , 6, 7]]);

功能

  • iterextd 为 Rust 中的迭代器功能提供了几个适配器。

使用方法

将以下内容添加到您的 Cargo.toml

[dependencies]
iterextd = "0.6.0"

许可证

本项目采用 MIT 许可证。

依赖项

~1MB
~21K SLoC