Rust- 迭代器

这篇具有很好参考价值的文章主要介绍了Rust- 迭代器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

In Rust, an iterator is a pattern that allows you to perform some task on a sequence of items in turn. An iterator is responsible for the logic of iterating over each item and determining when the sequence has finished.

In Rust, iterators are created by methods called iter() and into_iter() on collections like Vec, HashMap, etc. Rust’s iterators have a method called next() that returns Some(element) when there are more elements, and None when there are no more elements.

Here’s an example of basic usage of an iterator:

let v = vec![1, 2, 3];

let mut iter = v.iter();

assert_eq!(iter.next(), Some(&1));
assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), Some(&3));
assert_eq!(iter.next(), None);

In this example, v.iter() returns an iterator over &i32. The next method returns the next value wrapped in Some if there’s a value, or None if it’s gone through every item already.

Rust’s iterators are lazy, meaning they have no effect until you consume them. One common way to consume an iterator is to use a for loop, which is internally implemented using iterators:

let v = vec![1, 2, 3];

for i in v.iter() {
    println!("{}", i);
}

In addition to next, the Iterator trait defines a variety of useful methods (provided by the standard library), which can be used to do complex tasks. Here are a few examples:

  • map: Transforms the elements of an iterator.
  • filter: Filters elements based on a condition.
  • fold: Accumulates a value across an iterator.
  • collect: Consumes the iterator and returns a collection.
  • and many more…

Here’s an example using map and collect:

let v = vec![1, 2, 3];
let v_squared: Vec<_> = v.iter().map(|x| x * x).collect();

assert_eq!(v_squared, vec![1, 4, 9]);

In this case, map is used to square each element of the iterator, and collect is used to consume the iterator and produce a new Vec.

Note: iter() gives you an iterator over &T, and into_iter() gives you an iterator over T. There’s also iter_mut(), which gives you an iterator over &mut T, allowing you to modify the elements.文章来源地址https://www.toymoban.com/news/detail-622374.html

fn main() {
    let v = vec!["Rust", "Programming", "Language"];
    let mut it = v.iter();
    println!("{:?}", it.next());
    println!("{:?}", it.next());
    println!("{:?}", it.next());
    println!("{:?}", it.next());

    let iter = v.iter();
    for item in iter {
        println!("{}", item);
    }

    /*
        输出:
        Some("Rust")
        Some("Programming")
        Some("Language")
        None
        Rust
        Programming
        Language
    */

    /*
       iter() 返回一个只读可重入迭代器,迭代器元素的类型为 &T,
       into_iter() 返回一个只读不可重入迭代器,迭代器元素的类型为 T,
       iter_mut() 返回一个可修改重入迭代器,迭代器元素的类型为 &mut T
    */
}

到了这里,关于Rust- 迭代器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rust 迭代器

    迭代器模式:对一系列项执行某些任务 迭代器负责: 遍历每个项 确定序列(遍历)何时完成 Rust中的迭代器 如果只声明了迭代器而没有调用迭代器的方法,迭代器是没有工作的,没有效果的 iter方法:在不可变引用上创建迭代器 into_iter方法:创建的迭代器会获得所有权 it

    2024年02月02日
    浏览(29)
  • rust学习-迭代器

    迭代器的实现方式提供了对多种不同的序列使用相同逻辑的灵活性 没有迭代器时只能用索引,迭代器处理了所有这些逻辑,减少了重复代码,消除了潜在的混乱 迭代器都实现了一个叫做 Iterator 的定义于标准库的 trait 使用iter执行一个个的遍历 iter:生成一个不可变引用的迭代

    2024年02月16日
    浏览(31)
  • rust 自动化测试、迭代器与闭包、智能指针、无畏并发

    编写测试可以让我们的代码在后续迭代过程中不出现功能性缺陷问题;理解迭代器、闭包的函数式编程特性; BoxT 智能指针在堆上存储数据, RcT 智能指针开启多所有权模式等;理解并发,如何安全的使用线程,共享数据。 编写测试以方便我们在后续的迭代过程中,不会改坏

    2024年02月16日
    浏览(39)
  • Rust编程语言入门之函数式语言特性:-迭代器和闭包

    闭包(closures) 迭代器(iterators) 优化改善 12 章的实例项目 讨论闭包和迭代器的运行时性能 闭包:可以捕获其所在环境的匿名函数。 闭包: 是匿名函数 保存为变量、作为参数 可在一个地方创建闭包,然后在另一个上下文中调用闭包来完成运算 可从其定义的作用域捕获值

    2023年04月08日
    浏览(44)
  • 【跟小嘉学 Rust 编程】十三、函数式语言特性:迭代器和闭包

    【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学 Rust 编程】六、枚举

    2024年02月11日
    浏览(58)
  • Rust中的迭代器的使用:map转换、filter过滤、fold聚合、chain链接

    Rust中的迭代器是一种强大的工具,它提供了一种灵活、通用的方法来遍历序列。迭代器是实现了Iterator trait的类型,并需要至少实现一个next函数,用于让迭代器指向下一个迭代对象,并返回一个Option用于指示对象是否存在。 迭代器相比于for循环有一些优势。首先,迭代器提

    2023年04月12日
    浏览(37)
  • 研读Rust圣经解析——Rust learn-15(unsafe Rust )

    Rust 还隐藏有第二种语言,它不会强制执行这类内存安全保证:这被称为 不安全 Rust(unsafe Rust) 不安全 Rust 之所以存在,是因为静态分析本质上是保守的。当编译器尝试确定一段代码是否支持某个保证时,拒绝一些合法的程序比接受无效的程序要好一些。这必然意味着有时

    2024年02月01日
    浏览(35)
  • 【Rust】Rust学习 第十七章Rust 的面向对象特性

    面向对象编程(Object-Oriented Programming,OOP)是一种模式化编程方式。对象(Object)来源于 20 世纪 60 年代的 Simula 编程语言。这些对象影响了 Alan Kay 的编程架构中对象之间的消息传递。他在 1967 年创造了  面向对象编程  这个术语来描述这种架构。关于 OOP 是什么有很多相互矛

    2024年02月11日
    浏览(45)
  • 【Rust教程 | 基础系列1 | Rust初相识】Rust简介与环境配置

    Rust是一种系统编程语言,专注于速度、内存安全和并行性。它的设计目标是提供一种能够实现高性能系统的语言,同时保证内存安全和线程安全。 本篇教程的目标是通过融合理论与实践,帮助读者更快速、更有效地学习 Rust,并解决在学习过程中可能遇到的挑战。这些内容也

    2024年02月15日
    浏览(65)
  • 【Rust 基础篇】Rust 封装

    在 Rust 中,封装是一种面向对象编程的重要概念,它允许将数据和相关的方法组合在一起,形成一个独立的单元。通过封装,我们可以隐藏数据的实现细节,只暴露需要对外部使用的接口,从而提高代码的可维护性和安全性。本篇博客将详细介绍 Rust 中封装的概念,包含代码

    2024年02月16日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包