当前位置: 首页 > article >正文

Rust语言进阶之迭代器:iter用法实例(九十)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者

新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2. Rust之iter介绍
    • 🌻3. 代码实例
      • 🐓3.1 遍历集合中的元素
      • 🐓3.2 结合map方法进行元素转换
      • 🐓3.3 查找元素
      • 🐓3.4 用法总结

🌻1.前言

本篇目的:Rust语言进阶之迭代器:iter用法实例

🌻2. Rust之iter介绍

  1. 基本概念
    iter是Rust标准库中用于遍历集合(如数组、向量、哈希表等)元素的一个方法。它提供了一种访问集合元素的便捷方式,并生成一个迭代器,该迭代器可以按需访问每个元素。iter返回的迭代器实现了Iterator特征,这使得它能够与其他迭代器适配器(如mapfilterfor_each等)配合使用,从而提供强大的功能以对集合元素进行处理。iter方法本身不会修改原集合,它只用于生成一个可以访问集合元素的迭代器。

  2. 不可变迭代
    iter方法返回的是不可变的迭代器,这意味着在遍历过程中,原集合中的元素无法被修改。通过不可变迭代器,开发者可以访问集合的元素进行读取和处理,但不能对集合的内容进行更改。这种设计保证了数据的一致性和安全性,避免了在多线程或并发环境下修改数据所带来的问题。不可变迭代器对于那些只需要读取数据而不修改数据的场景非常有用。

  3. 与其他迭代器适配器的结合使用
    Rust的迭代器系统是高度组合化的,iter方法与多种迭代器适配器(如mapfilterzip等)结合使用,可以提供强大的数据处理能力。通过链式调用,开发者可以按需对集合的每个元素进行转换、过滤、聚合等操作。这种组合能力使得Rust的迭代器系统非常灵活,能够满足从简单到复杂的各种需求。开发者可以利用iter和这些适配器轻松实现功能强大的数据操作而不需要编写冗长的代码。

  4. 懒惰求值
    Rust的迭代器采用懒惰求值(lazy evaluation)机制,意味着只有在真正需要值时,迭代器才会开始计算。iter返回的迭代器也是懒惰的,只有在实际遍历时才会计算每个元素。因此,只有在执行诸如collectfor_each等消耗性操作时,迭代器才会遍历集合中的元素。

🌻3. 代码实例

🐓3.1 遍历集合中的元素

  • 1.应用场景:使用 iter 方法遍历集合中的每个元素,适用于需要对集合中的每个元素执行操作(如打印、计算等)的情况。
  • 2.通用语法:
for item in collection.iter() {
    // 操作每个元素
}

  • 3.用法实例
fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    
    for num in numbers.iter() {
        println!("{}", num);  // 输出集合中的每个元素
    }
}

numbers.iter() 创建一个不可变的迭代器,用于遍历 numbers 中的每个元素。
for 循环依次访问每个元素,并对其进行处理(此处为打印)。

🐓3.2 结合map方法进行元素转换

  • 1.应用场景:使用 iter 结合 map 方法对集合中的每个元素进行转换。map 方法会对每个元素应用一个闭包,并返回一个新的迭代器。常用于数据转换、计算或映射。
  • 2.通用语法:
collection.iter().map(|item| {
    // 处理元素
    transformed_item
});

  • 3.用法实例
fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    
    let doubled: Vec<_> = numbers.iter().map(|&num| num * 2).collect();
    
    println!("{:?}", doubled);  // 输出 [2, 4, 6, 8, 10]
}

iter() 返回一个不可变迭代器,map 方法对每个元素应用闭包。
collect() 将 map 返回的结果转换为新的集合(如 Vec)。

🐓3.3 查找元素

  • 1.应用场景:使用 iter 与 find 方法结合,可以查找集合中的第一个符合条件的元素。find 返回一个 Option,因为可能没有找到符合条件的元素。
  • 2.通用语法:
let result = collection.iter().find(|&item| {
    // 检查元素是否满足某个条件
});

  • 3.用法实例
fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    
    if let Some(&found) = numbers.iter().find(|&&num| num == 3) {
        println!("Found: {}", found);  // 输出 "Found: 3"
    } else {
        println!("Not found");
    }
}

find 方法返回第一个匹配的元素(符合给定条件的元素)。如果没有找到,返回 None。
&& 是用于解引用的,确保 num 与集合中的元素匹配。

🐓3.4 用法总结

在这里插入图片描述


http://www.kler.cn/a/522870.html

相关文章:

  • 大一计算机的自学总结:位运算的应用及位图
  • 2025.1.26机器学习笔记:C-RNN-GAN文献阅读
  • 【Super Tilemap Editor使用详解】(十六):高级主题:深入理解 Super Tilemap Editor
  • Flutter解决macbook M芯片Android Studio中不显示IOS真机的问题
  • 戴尔电脑设置u盘启动_戴尔电脑设置u盘启动多种方法
  • 消息队列篇--通信协议篇--网络通信模型(OSI7层参考模型,TCP/IP分层模型)
  • 在docker上部署nacos
  • FPGA 23 ,使用 Vivado 实现花式跑马灯( 使用 Vivado 实现花式流水灯,采用模块化编程,从按键消抖到LED控制 )
  • Hive:基本查询语法
  • R语言机器学习算法实战系列(十九)特征选择之Monte Carlo算法(Monte Carlo Feature Selection)
  • 内存泄漏的通用排查方法
  • 《Vision Transformer》论文精读:在大量足够数据量的条件下纯Transformer也能在图像分类任务中比肩SOTA
  • 蓝桥杯例题四
  • 基于微信小程序的社团活动助手php+论文源码调试讲解
  • 电力晶体管(GTR)全控性器件
  • 【Qt】文件操作
  • 打造专业PPT幻灯片布局的实用策略
  • 深入浅出Linux操作系统大数据定制Shell编程(六)
  • 2000-2020年各省第二产业增加值占GDP比重数据
  • 在线免费快速无痕去除照片海报中的文字logo
  • 【面试】【前端】【微信小程序】微信小程序面试内容总结
  • 动态规划DP 数字三角型模型 方格取数(题目详解+C++代码实现)
  • Vue.js Vuex 模块化管理
  • 软件测试丨从自动化软件测试到自主测试,还差几步?
  • Beautiful Soup 入门指南:从零开始掌握网页解析
  • MySQL 用户相关的操作详解