問題一覧に戻る
中級データ構造
問題79: カスタムイテレータ

Iteratorトレイトを実装してカスタムイテレータを作成します。トレイトはItem型とnext()メソッドの定義が必要です。next()は値がある限りSome(value)を返し、尽きたらNoneを返します。カスタムイテレータは標準のイテレータメソッドとシームレスに統合されます。このパターンはシーケンス生成、データ解析、ドメイン固有の反復に便利です。

struct Counter {
count: u32,
max: u32,
}

impl Counter {
fn new(max: u32) -> Self {
Counter { count: 0, max }
}
}

// Iterator実装
impl for Counter {
type Item = ;

// nextメソッド
fn next(&mut self) -> Option<> {
if self.count < self.max {
self.count 1;
Some()
} else {

}
}
}

fn main() {
// イテレータの使用
let counter = Counter::new(5);
let nums: Vec<u32> = counter.();
println!("{:?}", nums);

// メソッドとの組み合わせ
let sum: u32 = Counter::new(10)
.filter(|x| x % 2 == 0)
.(0, |acc, x| acc + x);
println!("Sum of evens: {}", sum);
}