面试题答案
一键面试遍历 Vec<i32>
fn main() {
let numbers: Vec<i32> = vec![1, 2, 3, 4, 5];
for number in numbers.iter() {
println!("Number: {}", number);
}
}
特点:
- 顺序性:
Vec
是有序集合,遍历Vec
时会按照元素插入的顺序进行访问。 - 简单性:通过
for...in
循环结合iter()
方法,简洁明了地对每个元素进行操作。iter()
方法返回一个迭代器,迭代器会按顺序逐个提供集合中的元素,且不会获取所有权,这意味着可以在遍历的同时继续使用原Vec
。
遍历 HashMap<String, i32>
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert(String::from("Alice"), 100);
scores.insert(String::from("Bob"), 80);
for (name, score) in scores.iter() {
println!("{}: {}", name, score);
}
}
特点:
- 无序性:
HashMap
是基于哈希表实现的,其遍历顺序通常是无序的。这是因为哈希表的设计目的主要是为了快速的查找和插入,而不是维护元素的插入顺序。 - 键值对访问:在遍历
HashMap
时,会同时获取键和值。通过iter()
方法返回的迭代器,提供的元素类型是(&K, &V)
,这里K
是键的类型,V
是值的类型,同样不会获取所有权,允许在遍历的同时继续使用原HashMap
。