iter()
是 Rust 中的一个方法,它可以用于 可迭代的集合,返回一个 不可变的迭代器。这个方法使得你可以遍历集合中的元素。通常,iter()
适用于以下几种类型:
1. 数组(Array)
数组是固定大小的集合,iter()
可以用来遍历数组中的元素。
示例:
let arr = [1, 2, 3];
for item in arr.iter() {
println!("{}", item); // 输出: 1, 2, 3
}
2. 切片(Slice)
切片是对数组或 Vec
的视图,iter()
同样可以用来遍历切片中的元素。
示例:
let slice = &[1, 2, 3];
for item in slice.iter() {
println!("{}", item); // 输出: 1, 2, 3
}
3. Vec
Vec
是动态数组类型,iter()
可以用来遍历 Vec
中的元素。
示例:
let vec = vec![1, 2, 3];
for item in vec.iter() {
println!("{}", item); // 输出: 1, 2, 3
}
4. 字符串(String)
String
类型支持 iter()
,但是它是以字符为单位进行迭代的,而不是字节。
示例:
let s = String::from("hello");
for c in s.chars() {
println!("{}", c); // 输出: h, e, l, l, o
}
5. HashMap
和 HashSet
对于哈希表类型的集合,例如 HashMap
和 HashSet
,也可以使用 iter()
方法。对于 HashMap
,iter()
会返回一个迭代器,允许你访问键值对;对于 HashSet
,则会返回集合中的元素。
示例:
use std::collections::HashMap;
let mut map = HashMap::new();
map.insert("a", 1);
map.insert("b", 2);
for (key, value) in map.iter() {
println!("{}: {}", key, value); // 输出: a: 1, b: 2
}
6. BTreeMap
和 BTreeSet
BTreeMap
和 BTreeSet
也支持 iter()
,它们会返回按照键排序的元素。
示例:
use std::collections::BTreeMap;
let mut map = BTreeMap::new();
map.insert(1, "a");
map.insert(2, "b");
for (key, value) in map.iter() {
println!("{}: {}", key, value); // 输出: 1: a, 2: b
}
7. VecDeque
VecDeque
是一个双端队列(deque),支持 iter()
,使得你可以从两端遍历元素。
示例:
use std::collections::VecDeque;
let mut deque = VecDeque::new();
deque.push_back(1);
deque.push_back(2);
deque.push_back(3);
for item in deque.iter() {
println!("{}", item); // 输出: 1, 2, 3
}
8. LinkedList
LinkedList
是一个双向链表,它也支持 iter()
来进行迭代。
示例:
use std::collections::LinkedList;
let mut list = LinkedList::new();
list.push_back(1);
list.push_back(2);
list.push_back(3);
for item in list.iter() {
println!("{}", item); // 输出: 1, 2, 3
}
总结
iter()
方法适用于 所有实现了 IntoIterator
trait 的类型,这些类型包括:
- 数组(array)
- 切片(slice)
Vec
和VecDeque
- 字符串(String)
- 集合类型,如
HashMap
,HashSet
,BTreeMap
,BTreeSet
,LinkedList
iter()
返回的迭代器允许你访问集合中的元素,并且不改变原始数据。它对于遍历集合非常有用,并且通常与 for
循环一起使用。