Vector 可以用迭代器将向量分成10个组吗?

Vector 可以用迭代器将向量分成10个组吗?,vector,iterator,rust,Vector,Iterator,Rust,我有let my_vec=(0..25)。collect:()我想将my_vec拆分为10组迭代器: [0,1,2,3,4,5,6,7,8,9]; [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]; [20,21,22,23,24,无,无,无,无,无]; 使用Rust中的迭代器可以做到这一点吗?在直接调用上没有这样的助手方法。但是,有两种主要方法: 使用(可直接在Vec上调用)。然而,它有一个微小的区别:它不会产生None,但最后一次迭代会产生一个较小的切片 :

我有
let my_vec=(0..25)。collect:()
我想将
my_vec
拆分为10组迭代器:

[0,1,2,3,4,5,6,7,8,9];
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19];
[20,21,22,23,24,无,无,无,无,无];

使用Rust中的迭代器可以做到这一点吗?

在直接调用上没有这样的助手方法。但是,有两种主要方法:

  • 使用(可直接在
    Vec
    上调用)。然而,它有一个微小的区别:它不会产生
    None
    ,但最后一次迭代会产生一个较小的切片

    :

  • 使用来自的。此板条箱扩展了标准库中的
    迭代器
    特性,因此此
    chunks()
    方法适用于所有迭代器!请注意,为了达到通用性,用法稍微复杂一些。这与上面描述的方法具有相同的行为:在上一次迭代中,区块将更小,而不是包含
    None
    s

    :


  • 您可以实现与仅使用标准库类似的解决方案:

    let my_vec = (0..25).collect::<Vec<_>>();
    
    let mut my_values = my_vec.into_iter().peekable();
    
    while my_values.peek().is_some() {
        let chunk: Vec<_> = my_values.by_ref().take(10).collect();
        println!("{:?}", chunk);
    }
    
    如果实际上不需要每个块的
    Vec
    ,可以省略
    collect
    调用,直接对
    by_ref
    创建的迭代器进行操作

    另见:


    谢谢!第一个解决方案正是我想要的
    extern crate itertools;
    use itertools::Itertools;
    
    for chunk in &(0..25).chunks(10) {
        println!("{:02?}", chunk.collect::<Vec<_>>());
    }
    
    let my_vec = (0..25).collect::<Vec<_>>();
    
    let mut my_values = my_vec.into_iter().peekable();
    
    while my_values.peek().is_some() {
        let chunk: Vec<_> = my_values.by_ref().take(10).collect();
        println!("{:?}", chunk);
    }