0023-Rust-自实现迭代器

环境

  • Time 2022-05-19
  • Rust 1.60.0

前言

说明

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

目标

针对自定义类型,实现一个迭代器。

自定义类型

#[derive(Default, Debug)]
struct Counter {
    value: usize,
}

自定义迭代器

pub trait MyIterator {
    type Item;
    fn my_next(&mut self) -> Option<Self::Item>;
}

实现迭代器

impl MyIterator for Counter {
    type Item = usize;

    fn my_next(&mut self) -> Option<Self::Item> {
        self.value += 1;
        if self.value < 5 {
            Some(self.value)
        } else {
            None
        }
    }
}

使用迭代器

fn main() {
    let mut counter = Counter::default();
    while let Some(value) = counter.my_next() {
        println!("value: {value:?}")
    }
}

解析

Iterator

其实标准库已经有一个迭代器的 trait 了,不需要再定义一个,直接使用就可以。

pub trait Iterator {
    type Item;
    fn next(&mut self) -> Option<Self::Item>;
}

完整代码

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

#[derive(Default, Debug)]
struct Counter {
    value: usize,
}

impl Iterator for Counter {
    type Item = usize;

    fn next(&mut self) -> Option<Self::Item> {
        self.value += 1;
        if self.value < 5 {
            Some(self.value)
        } else {
            None
        }
    }
}

总结

针对自定义类型,自己实现了一个迭代器方法,并直接使用了标准库的 Iterator

附录

posted @   jiangbo4444  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示