rust迭代适配器

在 Rust 中,迭代适配器(Iterator Adapters)是定义在 Iterator Trait 上的方法。它们的作用是接收一个已有的迭代器,对其进行一系列转换操作(例如过滤、映射、跳过等),然后返回一个新的、修改后的迭代器。
适配器允许您以声明式、函数式的方式构建复杂的数据处理管道,并且通常是“惰性的”(Lazy),即在调用最终的“消费者”(Consumer,如 collect() 或 sum())之前,不会执行任何实际的计算。
以下是几个最常用和重要的迭代器适配器:
 
常用的迭代器适配器列表
 
适配器描述示例用途
map(closure) 对每个元素应用一个闭包,将其转换为另一种类型或形式(一对一)。 将数字列表转换为字符串列表。
filter(predicate) 根据提供的布尔函数(谓词)过滤元素,只保留满足条件的元素。 筛选出所有偶数或所有非空字符串。
flat_map(closure) 结合 map 和 flatten。闭包返回一个迭代器,flat_map 将所有子迭代器的结果合并展平。 将句子列表展平为单词列表。
take(n) 限制迭代器产生的元素数量为前 n 个。 只处理前 10 个日志条目。
skip(n) 跳过迭代器开头的 n 个元素。 跳过 CSV 文件的标题行。
zip(other_iterator) 将两个迭代器合并,生成一个包含两个元素元组的新迭代器。 同时遍历姓名列表和年龄列表。
enumerate() 为迭代器的每个元素添加一个从 0 开始的索引,生成 (index, item) 的元组。 在循环中需要元素位置时使用。
rev() 反转迭代器的顺序(仅适用于已知长度的迭代器,如切片)。 倒序显示列表。
 

 
综合使用示例 Demo
这个示例演示了如何将多个迭代器适配器链接在一起,实现复杂的数据处理。
目标: 从一个数字列表中,筛选出大于 30 的偶数,然后将它们加倍,最后收集到一个新向量中。
 
fn main() {
    // 原始数据:现在包含了实际的数字
    let data = vec![10, 20, 40, 55, 60, 80]; 
    // 索引: 0   1   2   3   4   5

    // 使用迭代器适配器进行数据处理
    let processed_results: Vec<i32> = data
        .iter()             // 1. 获取不可变迭代器 (Item: &i32)
        .skip(2)            // 2. 适配器: 跳过前两个元素 (剩下: [40, 55, 60, 80])
        .filter(|&item| {   // 3. 适配器: 过滤出偶数 (剩下: [40, 60, 80])
            item % 2 == 0
        })
        .take(3)            // 4. 适配器: 只取前三个结果 (剩下: [40, 60, 80])
        .map(|&item| {      // 5. 适配器: 将每个元素加倍 (得到: [80, 120, 160])
            item * 2
        })
        .collect();         // 6. 消费者: 结束迭代链,收集到 Vec<i32>

    println!("原始数据: {:?}", data);
    println!("处理结果: {:?}", processed_results);
}
输出:

原始数据: [10, 20, 40, 55, 60, 80]
处理结果: [80, 120, 160]

posted @ 2025-12-08 16:57  PKICA  阅读(0)  评论(0)    收藏  举报