7 个版本
0.2.2 | 2023年12月7日 |
---|---|
0.2.1 | 2023年11月29日 |
0.1.3 | 2022年1月22日 |
#262 在 Rust 模式
7,049 每月下载量
用于 risinglight
12KB
186 行
iter-chunks
另一个提供 chunks
方法的 Rust Iterator
的crate。
请在此处阅读 API 文档。
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies]
iter-chunks = "0.2"
示例
目前,仅支持在 Chunks
上使用 while 循环。
use iter_chunks::IterChunks;
let arr = [1, 1, 2, 2, 3];
let expected = [vec![1, 1], vec![2, 2], vec![3]];
let mut chunks = arr.into_iter().chunks(2);
let mut i = 0;
while let Some(chunk) = chunks.next() {
assert_eq!(chunk.collect::<Vec<_>>(), expected[i]);
i += 1;
}
为什么创建这个 crate?
itertools 提供了许多强大的扩展,包括 chunks
。它非常实用,但它内部使用 RefCell
,导致它不是 Send
。
这是异步上下文中非常常见的一种用法,需要 Chunks
是 Send
。
async fn do_some_work(input: impl Iterator<Item = i32>) {
for chunk in input.chunks(1024) {
for v in chunk {
handle(v).await
}
do_some_flush().await
}
}
这个 crate 实现了不使用 RefCell
的 chunks
,因此 Chunks
既是 Send 也是 Sync。作为代价,Chunks
无法实现 Iterator
(这可以通过 GAT 和 LendingIterator 解决)。
未来工作
Iterator
实现的缺乏很难使用,最佳解决方案是等待 GAT 和合适的 LendingIterator crate。但在短期内,我们可以考虑提供一些常用方法,如 nth
、for_each
、try_for_each
等。
欢迎贡献。
许可证
许可协议如下
- Apache 许可证 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。