目录
什么是 Rust 迭代器
Rust 迭代器是一种抽象机制,用于顺序访问集合(如数组、向量)的元素。它通过 Iterator
trait 定义,提供了一种高效、函数式的遍历方式。
为什么要使用迭代器
- 简洁性:替代传统循环,代码更清晰。
- 功能强大:支持链式调用和函数式操作。
- 安全性:避免手动索引的越界错误。
- 性能:惰性求值,优化执行效率。
迭代器的基本概念
- Iterator trait:
- 定义在
std::iter::Iterator
。 - 核心方法:
next()
,返回Option<Self::Item>
。 - 分类:
- 迭代器生产者:如
iter()
(借用)、into_iter()
(消费)。 - 迭代器消费者:如
collect()
、sum()
。 - 惰性:迭代器方法仅在消费时执行。
常用迭代器方法
- 生产者:
iter()
:不可变借用。iter_mut()
:可变借用。into_iter()
:获取所有权。
- 适配器(转换迭代器):
map()
:转换每个元素。filter()
:筛选元素。take(n)
:取前 n 个。
- 消费者(结束迭代):
collect()
:收集到集合。sum()
:求和。for_each()
:对每个元素执行操作。
自定义迭代器
- 实现
Iterator
trait: - 定义
Item
类型。 - 实现
next()
方法。
struct Counter {
count: u32,
}
impl Iterator for Counter {
type Item = u32;
fn next(&mut self) -> Option<Self::Item> {
if self.count < 5 {
self.count += 1;
Some(self.count)
} else {
None
}
}
}
代码示例
基本迭代器
fn main() {
let v = vec![1, 2, 3];
for x in v.iter() {
println!("{}", x);
}
}
运行结果:
1
2
3
迭代器方法
fn main() {
let v = vec![1, 2, 3, 4, 5];
let result: Vec<i32> = v.iter()
.filter(|&&x| x % 2 == 0) // 筛选偶数
.map(|&x| x * 2) // 每个元素乘 2
.collect(); // 收集到 Vec
println!("{:?}", result);
}
运行结果:
[4, 8]
自定义迭代器
struct Counter {
count: u32,
}
impl Iterator for Counter {
type Item = u32;
fn next(&mut self) -> Option<Self::Item> {
if self.count < 5 {
self.count += 1;
Some(self.count)
} else {
None
}
}
}
fn main() {
let counter = Counter { count: 0 };
let sum: u32 = counter.sum();
println!("Sum: {}", sum);
}
运行结果:
Sum: 15 // 1 + 2 + 3 + 4 + 5
参考资料与出站链接
- 官方文档:
- 学习资源:
- 社区支持:
发表回复