Itérateurs
IntermédiaireLes itérateurs sont paresseux : rien ne s'exécute avant un consommateur (collect, sum, for...). Ils sont compilés en code aussi rapide qu'une boucle manuelle.
let nombres = vec![1, 2, 3, 4, 5, 6];
let carres_pairs: Vec<i32> = nombres
.iter()
.filter(|&&n| n % 2 == 0)
.map(|n| n * n)
.collect(); // [4, 16, 36]
let somme: i32 = nombres.iter().sum();
let max = nombres.iter().max(); // Option<&i32>
let trouve = nombres.iter().find(|&&n| n > 3);
let existe = nombres.iter().any(|&n| n == 3);
let tous = nombres.iter().all(|&n| n > 0);
for (i, n) in nombres.iter().enumerate() { println!("{i}: {n}"); }
let paires: Vec<_> = nombres.iter().zip(["a", "b"]).collect();
// Trois façons d'itérer
for x in &v {} // .iter() -> &T
for x in &mut v {} // .iter_mut() -> &mut T
for x in v {} // .into_iter() -> T (consomme v)