在 Rust 中,迭代器(Iterator)是一种非常强大和灵活的抽象,用于遍历集合或序列的元素。迭代器提供了一种统一的方式来处理不同类型的集合,例如数组、向量、哈希表等。以下是有关 Rust 迭代器的一些基本信息:

创建迭代器

在 Rust 中,迭代器可以通过多种方式创建,其中最常见的是使用 iter() 方法。以下是一些示例:
// 通过 iter() 创建迭代器
let numbers = vec![1, 2, 3, 4, 5];
let mut iter = numbers.iter();

// 通过 into_iter() 创建迭代器,消耗集合的所有权
let numbers = vec![1, 2, 3, 4, 5];
let mut iter = numbers.into_iter();

// 通过 iter_mut() 创建可变迭代器
let mut numbers = vec![1, 2, 3, 4, 5];
let mut iter = numbers.iter_mut();

迭代器方法

一旦有了迭代器,你可以使用各种方法来处理集合的元素。这些方法包括 map、filter、fold 等。以下是一些示例:
// 使用 map() 方法对每个元素执行操作
let numbers = vec![1, 2, 3, 4, 5];
let squares: Vec<_> = numbers.iter().map(|&x| x * x).collect();

// 使用 filter() 方法过滤元素
let numbers = vec![1, 2, 3, 4, 5];
let evens: Vec<_> = numbers.iter().filter(|&&x| x % 2 == 0).collect();

// 使用 fold() 方法进行累积操作
let numbers = vec![1, 2, 3, 4, 5];
let sum = numbers.iter().fold(0, |acc, &x| acc + x);

for 循环中的迭代器

Rust 的 for 循环是通过迭代器来工作的,你可以使用 for 循环来遍历集合的元素:
let numbers = vec![1, 2, 3, 4, 5];

// 使用 for 循环遍历迭代器
for &num in numbers.iter() {
    println!("{}", num);
}

自定义迭代器

你也可以实现自定义的迭代器,为你的类型添加迭代行为。这涉及到实现 Iterator trait。这样,你的类型就可以使用标准库提供的所有迭代器方法。
struct Counter {
    current: u32,
    max: u32,
}

impl Iterator for Counter {
    type Item = u32;

    fn next(&mut self) -> Option<Self::Item> {
        if self.current < self.max {
            let result = Some(self.current);
            self.current += 1;
            result
        } else {
            None
        }
    }
}

// 使用自定义迭代器
let counter = Counter { current: 0, max: 5 };
let values: Vec<_> = counter.collect();  // [0, 1, 2, 3, 4]

这里的 Counter 结构体实现了 Iterator trait,使得它可以像标准库的迭代器一样使用。

Rust 的迭代器是语言中非常强大和灵活的特性之一,通过使用迭代器,你可以编写更简洁、可读性更强的代码。


转载请注明出处:http://www.pingtaimeng.com/article/detail/6777/Rust