迭代器
迭代器有助于迭代一组值,例如数组、向量、映射等。迭代器实现了 Rust 标准库中定义的 Iterator trait。的ITER()方法返回集合的迭代器对象。迭代器对象中的值称为项。迭代器的next()方法可用于遍历项目。当它到达集合的末尾next()方法返回一个值None。
以下示例使用迭代器从数组中读取值。
fn main() {
//declare an array
let a = [10,20,30];
let mut iter = a.iter();
// fetch an iterator object for the array
println!("{:?}",iter);
//fetch individual values from the iterator object
println!("{:?}",iter.next());
println!("{:?}",iter.next());
println!("{:?}",iter.next());
println!("{:?}",iter.next());
}
输出
Iter([10, 20, 30])
Some(10)
Some(20)
Some(30)
None
如果像 array 或 Vector 这样的集合实现了 Iterator trait,那么可以使用 for...in 语法遍历它,如下所示 -
fn main() {
let a = [10,20,30];
let iter = a.iter();
for data in iter{
print!("{}\t",data);
}
}
输出
以下 3 个方法从集合中返回一个迭代器对象,其中 T 代表集合中的元素。
序号 |
Methods & Description |
1 |
iter()
在 &T 上给出一个迭代器(对 T 的引用)
|
2 |
into_iter()
给出 T 上的迭代器
|
3 |
iter_mut()
给出一个迭代器 &mut T
|
说明:一段旅程()
iter() 函数使用借用的概念。它返回对集合中每个元素的引用,使集合保持不变并可在循环后重用。
fn main() {
let names = vec!["Kannan", "Mohtashim", "Kiran"];
for name in names.iter() {
match name {
&"Mohtashim" => println!("There is a rustacean among us!"),
_ => println!("Hello {}", name),
}
}
println!("{:?}",names);
// reusing the collection after iteration
}
输出
Hello Kannan
There is a rustacean among us!
Hello Kiran
["Kannan", "Mohtashim", "Kiran"]
说明 - into_iter()
此功能使用所有权的概念。它将集合中的值移动到一个 iter 对象中,即集合被消耗并且不再可用于重用。
fn main(){
let names = vec!["Kannan", "Mohtashim", "Kiran"];
for name in names.into_iter() {
match name {
"Mohtashim" => println!("There is a rustacean among us!"),
_ => println!("Hello {}", name),
}
}
// cannot reuse the collection after iteration
//println!("{:?}",names);
//Error:Cannot access after ownership move
}
输出
Hello Kannan
There is a rustacean among us!
Hello Kiran
说明 - for 和 iter_mut()
该函数类似于iter()函数。但是,此函数可以修改集合中的元素。
fn main() {
let mut names = vec!["Kannan", "Mohtashim", "Kiran"];
for name in names.iter_mut() {
match name {
&mut "Mohtashim" => println!("There is a rustacean among us!"),
_ => println!("Hello {}", name),
}
}
println!("{:?}",names);
//// reusing the collection after iteration
}
输出
Hello Kannan
There is a rustacean among us!
Hello Kiran
["Kannan", "Mohtashim", "Kiran"]