rust / intermediate
Snippet
Iterator-Adaptoren und verzögerte Auswertung
Rust-Iteratoren sind faul (lazy), das bedeutet, keine Berechnung findet statt, bis du eine Terminal-Operation wie collect() aufrufst. Jeder Adaptor (filter, map, take) erzeugt einen neuen Iterator, ohne Code auszuführen. Dies ermöglicht effizientes Verketten ohne Zwischenallokationen.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
fn main() {let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];let result: Vec<_> = numbers.iter().filter(|&&x| x % 2 == 0).map(|x| x * x).collect();println!("Original: {:?}", numbers);println!("Filtered & squared evens: {:?}", result);let sum: i32 = numbers.iter().filter(|&&x| x > 5).take(3).sum();println!("Sum of first 3 numbers > 5: {}", sum);}
Erklärung
1
.iter()
Erzeugt einen leihenden Iterator über den Vektor
2
.filter(|&&x| x % 2 == 0)
Closure gibt true für gerade Zahlen zurück; &&x destrukturiert die &&i32 Referenz
3
.map(|x| x * x)
Transformiert jedes Element; faul bis collect() aufgerufen wird
4
.collect()
Terminal-Operation, die den Iterator konsumiert und eine Collection erzeugt
5
.take(3)
Begrenzt die Verarbeitung auf die ersten 3 passenden Elemente