Is it possible to split a vector into groups of 10 with iterators?

前端 未结 2 422
说谎
说谎 2020-12-06 05:14

I have let my_vec = (0..25).collect::>() and I would like to split my_vec into iterators of groups of 10:



        
2条回答
  •  星月不相逢
    2020-12-06 05:40

    There is no such helper method on the Iterator trait directly. However, there are two main ways to do it:

    1. Use the [T]::chunks() method (which can be called on a Vec directly). However, it has a minor difference: it won't produce None, but the last iteration yields a smaller slice.

      Example:

      let my_vec = (0..25).collect::>();
      
      for chunk in my_vec.chunks(10) {
          println!("{:02?}", chunk);
      }
      

      Result:

      [00, 01, 02, 03, 04, 05, 06, 07, 08, 09]
      [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
      [20, 21, 22, 23, 24]
      
    2. Use the Itertools::chunks() method from the crate itertools. This crate extends the Iterator trait from the standard library so this chunks() method works with all iterators! Note that the usage is slightly more complicated in order to be that general. This has the same behavior as the method described above: in the last iteration, the chunk will be smaller instead of containing Nones.

      Example:

      extern crate itertools;
      use itertools::Itertools;
      
      for chunk in &(0..25).chunks(10) {
          println!("{:02?}", chunk.collect::>());
      }
      

      Result:

      [00, 01, 02, 03, 04, 05, 06, 07, 08, 09]
      [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
      [20, 21, 22, 23, 24]
      

提交回复
热议问题