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