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

Rust语言进阶之enumerate用法实例(九十六)

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

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

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

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

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2. Rust之enumerate介绍
    • 🌻3. 代码实例
      • 🐓3.1 同时获取元素的索引和值
      • 🐓3.2 用于生成带有索引的序列
      • 🐓3.3 与条件语句结合,筛选特定索引的元素
      • 🐓3.4 用法总结

🌻1.前言

本篇目的:Rust语言进阶之enumerate用法实例

🌻2. Rust之enumerate介绍

在Rust语言中,enumerate是一个常用的迭代器适配器,它为迭代器的每个元素添加一个索引,从而返回一个新的迭代器,每个元素是一个包含索引和值的元组。这种功能非常适合需要同时获取元素及其对应位置的场景。以下是enumerate的五个最重要的特点:

  1. 生成带索引的元组
    enumerate会为迭代器的每个元素分配一个从零开始递增的索引,并将这个索引与元素值组成一个元组作为输出。通过这一特性,开发者可以在遍历集合的同时轻松获取每个元素的位置,而不需要单独维护一个计数器变量。

  2. 惰性求值特性
    和Rust中的大多数迭代器方法一样,enumerate是惰性求值的。它不会在调用时立即生成所有索引与元素的配对,而是返回一个新的迭代器,只有在真正迭代时才会生成所需的元组。这种特性确保了资源的高效使用,尤其是在处理大数据集合时。

  3. 与其他迭代器方法的组合使用
    enumerate通常与其他迭代器方法(如mapfiltercollect)结合使用,从而实现更加复杂的数据操作。例如,可以对enumerate生成的元组进行筛选、变换或聚合操作。这种组合方式使得开发者能够以声明式的风格处理数据流,而无需手动操作索引。

  4. 保留原始迭代器的顺序
    enumerate在生成索引时会严格按照原始迭代器的顺序进行编号。因此,返回的元组序列不仅包括索引和元素值,还保留了原始数据的顺序特性。这一点对需要顺序处理的数据操作非常重要。

  5. 常见应用场景
    enumerate在需要索引信息的遍历场景中尤为实用,例如对数组或向量中的元素进行操作时,索引可以用于标记特定的位置。此外,enumerate也可以用在生成日志、调试信息或需要根据位置执行不同逻辑的场景中。

🌻3. 代码实例

🐓3.1 同时获取元素的索引和值

  • 1.应用场景:enumerate 常用于遍历集合时,同时需要知道每个元素的索引和值。例如,当处理数组、向量或其他集合时,可以通过索引来进行额外的逻辑操作。
  • 2.通用语法:
for (index, value) in iterator.enumerate() {
    // 使用 index 和 value
}

  • 3.用法实例
fn main() {
    let values = vec!["a", "b", "c"];

    for (index, value) in values.iter().enumerate() {
        println!("Index: {}, Value: {}", index, value);
    }
}

在这个例子中,enumerate 为每个元素生成一个元组,元组的第一个值是索引,第二个值是元素的引用。通过 for 循环,可以同时访问索引和元素值。

🐓3.2 用于生成带有索引的序列

  • 1.应用场景:当需要基于索引生成新的序列时,enumerate 可以与迭代器方法(如 map)结合使用,用于生成一组新的数据。
  • 2.通用语法:
let new_iter = iterator.enumerate().map(|(index, value)| ...);

  • 3.用法实例
fn main() {
    let values = vec!["apple", "banana", "cherry"];
    let result: Vec<String> = values
        .iter()
        .enumerate()
        .map(|(index, value)| format!("{}. {}", index + 1, value))
        .collect();

    for item in result {
        println!("{}", item);
    }
}

在这个例子中,enumerate 提供了索引,map 使用索引生成了编号格式的字符串。输出将是带有序号的水果列表。

🐓3.3 与条件语句结合,筛选特定索引的元素

  • 1.应用场景:enumerate 可以与条件语句结合,用于筛选出符合特定条件的元素。例如,仅处理索引为偶数的元素或某个范围内的元素。
  • 2.通用语法:
let filtered = iterator.enumerate().filter(|(index, _)| condition).map(|(_, value)| value);

  • 3.用法实例
fn main() {
    let values = vec![10, 20, 30, 40, 50];

    let even_index_values: Vec<_> = values
        .iter()
        .enumerate()
        .filter(|(index, _)| index % 2 == 0)
        .map(|(_, value)| value)
        .collect();

    println!("{:?}", even_index_values); // 输出 [10, 30, 50]
}

在这个例子中,enumerate 提供了索引,filter 用来筛选索引为偶数的元素,map 则提取出元素的值

🐓3.4 用法总结

在这里插入图片描述


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

相关文章:

  • 572. 另一棵树的子树
  • git push到远程仓库时无法推送大文件
  • MySQL备忘录
  • Vue-day2
  • 图论——最小生成树的扩展应用
  • 渗透测试之WAF规则触发绕过规则之规则库绕过方式
  • 第33篇:Python开发进阶:自然语言处理与文本分析
  • Java继承中的静态方法隐藏与实例变量隐藏:深入解析与最佳实践
  • 年化19.3%策略集|ctpbee_api替换成openctp整合backtrader实盘方案(代码+数据)
  • 大厂面试题备份20250129
  • dify实现原理分析-rag-检索(Retrieval)服务的实现
  • 信号处理以及队列
  • 一文讲解Java中的异常处理机制
  • 变量和简单数据类型(字符串)
  • doris:导入时实现数据转换
  • Java 分布式与微服务架构:现代企业应用开发的新范式
  • JAVASE入门十二脚-IO流charArrayReader,bufferedReader,输入与输出,采集百度网页,分块操作
  • Golang 并发机制-1:Golang并发特性概述
  • 实战:如何快速让新网站被百度收录?
  • 11 Spark面试真题
  • Redis常用命令合集【一】
  • 春节旅游高峰,人力资源如何巧妙应对?‌
  • Python标准库 - os (3) 调度策略、系统信息
  • 数据结构--数组链表
  • 大模型时代下的具身智能
  • 实验五---控制系统的稳定性分析---自动控制原理实验课