2017-09-02 1 views
2

Considérez ce qui suit:Comment le résultat de collect() peut-il être limité à un certain nombre d'éléments?

fn main() { 
    let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
    let even = input.iter().filter(|&x| x % 2 == 0).collect::<Vec<&i32>>(); 

    for x in &even { 
     println!("{}", x); 
    } 
} 

Ce sorties 2 4 6 8 10 (comme prévu). Cependant, que faire si je voulais seulement les 3 premiers articles? Est-il possible de limiter la valeur de retour de collect d'une manière ou d'une autre, sans collecter tout d'abord et jeter ensuite certains des articles?

Répondre

4

Vous pouvez utiliser Iterator::take:

fn main() { 
    let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
    let even = input 
     .iter() 
     .filter(|&x| x % 2 == 0) 
     .take(3) 
     .collect::<Vec<&i32>>(); 

    for x in &even { 
     println!("{}", x); 
    } 
} 
+0

parfait, qui est exactement ce que je cherchais. Merci! –