环境
- Rust 1.56.1
- VSCode 1.61.2
概念
参考:https://doc.rust-lang.org/rust-by-example/trait/iter.html
示例
区间手动迭代
fn main() {
// `0..3` is an `Iterator` that generates: 0, 1, and 2.
let mut sequence = 0..3;
println!("Four consecutive `next` calls on 0..3");
println!("> {:?}", sequence.next());
println!("> {:?}", sequence.next());
println!("> {:?}", sequence.next());
println!("> {:?}", sequence.next());
}
区间自动迭代
fn main() {
println!("Iterate through 0..3 using `for`");
for i in 0..3 {
println!("> {}", i);
}
}
Fibonacci
struct Fibonacci {
curr: u32,
next: u32,
}
impl Iterator for Fibonacci {
type Item = u32;
fn next(&mut self) -> Option<Self::Item> {
let new_next = self.curr + self.next;
self.curr = self.next;
self.next = new_next;
Some(self.curr)
}
}
fn fibonacci() -> Fibonacci {
Fibonacci { curr: 0, next: 1 }
}
fn main() {
// take 限制迭代次数
println!("The first four terms of the Fibonacci sequence are: ");
for i in fibonacci().take(4) {
println!("> {}", i);
}
// skip 跳过迭代次数
println!("The next four terms of the Fibonacci sequence are: ");
for i in fibonacci().skip(4).take(4) {
println!("> {}", i);
}
}
数组迭代
fn main() {
let array = [1u32, 3, 3, 7];
println!("Iterate the following array {:?}", &array);
for i in array.iter() {
println!("> {}", i);
}
}
总结
了解了 Rust 中的迭代器,可以通过 for 循环来遍历迭代器。