rust / intermediate
Snippet
Träge Auswertung und Verkettung von Iteratoren
Rust Iteratoren sind träge - sie führen keine Berechnung durch, bis sie durch eine Terminal-Operation wie collect() oder sum() konsumiert werden. Jeder Adapter (filter, map, take) erzeugt einen neuen Iterator, der den vorherigen umschließt, was effizientes Verketten ohne ZwischenSammlungen ermöglicht.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fn main() {let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];let result: Vec<i32> = numbers.iter().filter(|&&x| x > 3).map(|x| x * x).take(3).collect();println!("{:?}", result); // [16, 25, 36]let sum: i32 = (0..100).filter(|&x| x % 2 == 0).map(|x| x * x).sum();println!("Sum of squares of evens: {}", sum); // 171700}
Erklärung
1
.iter()
Erzeugt einen Iterator-Referenz - noch keine Berechnung
2
.filter(|&&x| x > 3)
Träger Adapter - läuft nur, wenn Iterator konsumiert wird
3
.take(3)
Begrenzt Ausgabe auf erste 3 übereinstimmende Elemente,short-circuiting Berechnung
4
.collect()
Terminal-Operation, die alle trägen Adapter zur Ausführung bringt