0024-Rust-自实现迭代器

环境

  • Time 2022-05-21
  • Rust 1.61.0

前言

说明

参考:https://doc.rust-lang.org/std/iter/index.html

目标

有时候自定义的 struct 较复杂,需要单独创建另一个结构体来实现迭代器。

自定义类型

struct MyData {
    value1: usize,
    value2: usize,
    value3: usize,
    value4: usize,
}

Default

impl Default for MyData {
    fn default() -> Self {
        Self {
            value1: 88,
            value2: 44,
            value3: 66,
            value4: 22,
        }
    }
}

实现迭代器

#[derive(Debug)]
struct MyIterator(Vec<usize>);

impl Iterator for MyIterator {
    type Item = usize;

    fn next(&mut self) -> Option<Self::Item> {
        self.0.pop()
    }
}

生成迭代器

impl MyData {
    fn to_my_iterator(self) -> MyIterator {
        let vec = vec![self.value4, self.value3, self.value2, self.value1];
        MyIterator(vec)
    }
}

使用迭代器

fn main() {
    let mut iter = MyData::default().to_my_iterator();
    while let Some(value) = iter.next() {
        println!("value: {value:?}")
    }
    println!("{iter:?}")
}

总结

针对自定义类型,不太好直接实现迭代器,新增了另一个结构体来实现迭代器。

附录

posted @ 2022-08-29 17:41  波尔  阅读(39)  评论(0编辑  收藏  举报