2020 Rust 入门 迭代器

rust.jpeg

现在多半 RUST 教程都是基于 RUST 官方提供的The Rust Programming Language 电子教程 。我自己在学习 RUST 过程中也是基于这本电子书,边学习边实践书中实例来进行学习的。

今天要给大家说内容是 RUST 中的迭代器相关内容,那么是什么是迭代器,在 RUST 迭代器又有什么不同之处呢? 对于集合元素按一定顺序执行某种操作。

fn main(){
    let v = vec![1,2,3];
    let v_iter = v.iter();
}

在 Rust 中,迭代器是惰性的,开始对于惰性这个词还不理解,为什么是惰性(lazy)的呢? 惰性又有什么好处呢? 也就是在调用迭代器方法之前是没有任何效果(或者动作),也就是我们去主动从迭代器中一个一个随时取出元素,创建好迭代器不会一下子把集合里所有元素都抛给调用者。这就是惰性的好处。例如,上面的代码中,仅是通过调用 Vec<T>上定的iter方法 创建了一个迭代器。

fn main(){
    let v = vec![1,2,3];
    let v_iter = v.iter();
    for val in v_iter {
        println!("Got: {}", val);
    }
}

我们用迭代器和for循环在每个项目上执行一些代码,尽管我们到现在为止都没有提到对iter的调用是什么。

fn main(){
    let v = vec![1,2,3];
    let mut v_iter = v.iter();
    // for val in v_iter {
    //     println!("Got: {}", val);
    // }

    println!("{:?}",v_iter.next())
}
fn main(){
    let v = vec![1,2,3];
    let mut v_iter = v.iter();
    // for val in v_iter {
    //     println!("Got: {}", val);
    // }

    println!("{:?}",v_iter.next());
    println!("{:?}",v_iter.next());
    println!("{:?}",v_iter.next());
    println!("{:?}",v_iter.next());
}

如果在标准库中还没有提供迭代器,就需要设置一个指针(索引),指向集合中某一个元素,通过不断递增指针达到遍历集合中每一个元素,显然这里相对于迭代器多出一个保存指针的变量。

而且迭代器给了你更多的灵活性,可以对许多不同种类的序列使用同样的逻辑,不限于那些以索引的数据结构。

Some(1)
Some(2)
Some(3)
None
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 缘起 实践出真知快速获取澄清概念OwnershipMoveReferenceMutable reference解释...
    lambeta阅读 11,179评论 2 19
  • 原文:Fearless Concurrency with Rust by Aaron Turon Apr 10,...
    猿基地阅读 12,165评论 0 71
  • PYTHON-进阶-ITERTOOLS模块小结转自wklken:http://wklken.me/posts/20...
    C_Y_阅读 1,100评论 0 2
  • Python中有一类工具叫做迭代工具,它能从左至右扫描对象。这包括了for循环、列表解析、in成员关系测试以及ma...
    mysimplebook阅读 881评论 0 0
  • 12月一27日,日精进,今日体验,今天下午去老店拿现代的保单,拿上以后回到店里和王松一起去送车,正好固安那边还有一...
    王松奇阅读 171评论 0 0