capypad
0 Tage Serie
rust / intermediate
Snippet

Benutzerdefinierte Iterator-Implementierung

Das Implementieren des Iterator-Traits ermöglicht es, benutzerdefinierte iterable Typen zu erstellen. Das Iterator-Trait erfordert eine next()-Methode, die Option<Item> zurückgibt. Dies ermöglicht leistungsstarkes Methoden-Chaining mit filter, map, fold und anderen Kombinatoren.

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
23
24
25
26
27
28
29
struct Counter {
count: u32,
max: u32,
}
 
impl Counter {
fn new(max: u32) -> Self {
Counter { count: 0, max }
}
}
 
impl Iterator for Counter {
type Item = u32;
fn next(&mut self) -> Option<Self::Item> {
if self.count < self.max {
self.count += 1;
Some(self.count)
} else {
None
}
}
}
 
fn main() {
let counter = Counter::new(5);
let sum: u32 = counter.filter(|x| x % 2 == 0).sum();
println!("Sum of even numbers: {}", sum);
}
Erklärung
1
struct Counter { count: u32, max: u32 }
Struct enthält aktuellen Zählerstand und Maximalwert
2
impl Iterator for Counter
Implementiert Iterator-Trait für benutzerdefinierten Typ
3
type Item = u32;
Assoziierter Typ definiert, was der Iterator liefert
4
fn next(&mut self) -> Option<Self::Item>
Gibt Some(Wert) zurück solange Elemente übrig sind, sonst None