创建迭代器
在 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