首页 > 其他分享 >0023-Rust-自实现迭代器

0023-Rust-自实现迭代器

时间:2022-08-29 17:45:26浏览次数:89  
标签:0023 迭代 mut self value next fn 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

附录

标签:0023,迭代,mut,self,value,next,fn,Rust
From: https://www.cnblogs.com/jiangbo4444/p/16636744.html

相关文章

  • 我在 Rust 中的第一个真实代码
    我在Rust中的第一个真实代码每种语言都始于游乐场。你可以在那里做一些令人惊奇的事情,但它们就像邻近的儿童沙饼一样令人惊奇。一旦你从操场进入“做一些真正的事情”,......
  • Rust学习笔记-初识
    很早以前,看到马斯克说:“我是Rust的粉丝,但是为了性能会选择C。”之后就对Rust产生了一些兴趣,不过由于时间关系没有及时深入了解。最近,又看到Meta选定四种编程语言作为首选......
  • es6——iterator迭代器
    iterator的说明1es6创建了一种新的迭代器2forof可以遍历使用迭代器3ArrayArgumentsSetMapStringTypeArrayNodeList都支持4iterator是对象的一个symbol类......
  • Python基础——迭代器 生成器
    迭代器iterator迭代简单理解就是重复,但是每次重复产生的结果还要作为下次重复的初始值。可迭代对象:含有——iter——方法的对象。可以用for...in..遍历的都是可迭代对......
  • 正确的策略迭代流程是什么?
    当前已经有了一版线上用户正在使用的方案,然后算法对某些策略做了模型迭代或者规则优化(反映在cxr或者更好的用户体验)产生了一版新的方案,新方案的上线流程是怎样的?方式一:新......
  • Rust-语句和表达式
    语句和表达式Rust的函数体是由一系列语句组成,最后由一个表达式来返回值,例如:fnadd_with_extra(x:i32,y:i32)->i32{letx=x+1;//语句lety=y+......
  • 关于 map 的迭代器
     今天遇到一个问题CountCompileResult(constLIST_MAP&rfLmCompileWafers){    for(autoitr=rfLmCompileWafers.begin();itr!=rfLmCompileWafers.e......
  • 技术分享| anyRTC 8月更新迭代
    anyRTC8月更新迭代,新增视频水印功能,有效保护企业版权;此外还添加了抓拍图片功能;同时对音视频模块,实时消息模块等多项功能进行了优化改进。SDK新增1、新增视频水印功能为......
  • STL——反向迭代器
    正向迭代器:map<int, int>::iterator mit;反向迭代器:map<int, int>::reverse_iterator rit;     两者相差一个元素,从一个反向迭代器获得对应的正向迭代器需......
  • JetBrains Fleet 1.8 最新测试版功能C#,Rust开发演示与免费下载地址
     链接:https://pan.baidu.com/s/1KSBUhfeFG8KwNZVJBg9mTg?pwd=27at提取码:27at请勿用手机百度网盘下载文件会打不开JetBrainsFleet1.8最新版安装包Windows,M......