2017-10-21 69 views

回答

6

上有Iterator trait直接沒有這樣的輔助方法。但是,有兩種主要的方式做到這一點:

  1. 使用[T]::chunks() method(可在Vec<T>直接調用)。然而,它有一個細微的差別:它不會產生None,但最後一次迭代會產生一個更小的片。

    Example

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

    結果:

    [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] 
    
  2. 使用從the crate itertoolsItertools::chunks() method。這個箱子擴展了標準庫中的Iterator特性。所以這個chunks()方法適用於所有迭代器!請注意,爲了成爲一般用戶,使用情況稍微複雜一些。這與上面描述的方法具有相同的行爲:在上一次迭代中,塊將更小,而不是包含None

    Example

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

    結果:

    [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] 
    

另外請注意:

  • 在你的代碼,vec![0..25]沒有做你期望的事情!它將創建一個與一個元素的向量。該元素是Range。我在上面的例子中解決了這個問題。
  • 在Rust中,變量有snake_case的名字。
+0

謝謝!第一個解決方案正是我所期待的 – Teo