Rust Pattern - 不重叠地遍历迭代器的每两个元素

本文探讨了如何在Rust中使用标准库和非标准库方法对向量进行两两分组,比较了for循环、`zip`和`chunks`的不同优缺点,同时提到了`itertools`库和自定义库在处理此问题上的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#[test]
fn test() {
    let vec = vec![1, 2, 3, 4, 5, 6];
    assert_eq!(vec.len()%2, 0);

    let _grouped = vec.iter().step_by(2).zip(
        vec.iter().skip(1).step_by(2)
    ).inspect(|(&op, &num)| {
        println!("op={} num={}", op, num);
    }).collect::<Vec<(_,_)>>();
    /*
    op=1 num=2
    op=3 num=4
    op=5 num=6
    */
}

使用 std 的解法:

  1. for 循环
  2. zip,见上述代码;坏处是慢
  3. slice.chunks;坏处是没办法直接解包,并且只能对 slice 使用,不能对 iterator 使用
    let grouped = vec.chunks(2).
        inspect(|&slice| println!("op = {:?} num = {:?}", slice[0], slice[1])).
        collect::<Vec<_>>();

    println!("{:?}", grouped);

非 std 的解法:

  1. https://docs.rs/itertools/latest/itertools/trait.Itertools.html#method.chunks
    据说有不 Send 的问题
  2. https://github.com/TennyZhuang/iter-chunks
    tygg 自己写的库
  3. https://github.com/rust-lang/rust/issues/98326
    标准库的 unstable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值