7 个版本

0.2.2 2023年12月7日
0.2.1 2023年11月29日
0.1.3 2022年1月22日

#262Rust 模式

Download history • Rust 包仓库 3305/week @ 2024-03-13 • Rust 包仓库 2767/week @ 2024-03-20 • Rust 包仓库 1946/week @ 2024-03-27 • Rust 包仓库 3759/week @ 2024-04-03 • Rust 包仓库 2029/week @ 2024-04-10 • Rust 包仓库 2601/week @ 2024-04-17 • Rust 包仓库 3472/week @ 2024-04-24 • Rust 包仓库 1386/week @ 2024-05-01 • Rust 包仓库 1443/week @ 2024-05-08 • Rust 包仓库 2238/week @ 2024-05-15 • Rust 包仓库 1513/week @ 2024-05-22 • Rust 包仓库 2463/week @ 2024-05-29 • Rust 包仓库 2526/week @ 2024-06-05 • Rust 包仓库 1756/week @ 2024-06-12 • Rust 包仓库 1503/week @ 2024-06-19 • Rust 包仓库 784/week @ 2024-06-26 • Rust 包仓库

7,049 每月下载量
用于 risinglight

MIT/Apache

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

这是异步上下文中非常常见的一种用法,需要 ChunksSend

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 实现了不使用 RefCellchunks,因此 Chunks 既是 Send 也是 Sync。作为代价,Chunks 无法实现 Iterator(这可以通过 GAT 和 LendingIterator 解决)。

未来工作

Iterator 实现的缺乏很难使用,最佳解决方案是等待 GAT 和合适的 LendingIterator crate。但在短期内,我们可以考虑提供一些常用方法,如 nthfor_eachtry_for_each 等。

欢迎贡献。

许可证

许可协议如下

任选其一。

无运行时依赖