capypad
0 Tage Serie
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
rust
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