主题
循环
三种循环:loop 无条件重复,while 按条件,for 遍历迭代器。它们都是表达式;loop 可以通过 break value 带出值。
rust
let mut n = 0;
let found = loop {
n += 1;
if n == 3 {
break n;
}
};
assert_eq!(found, 3);continue 进入下一轮。多层循环用标签指定跳到哪一层:
rust
'outer: for i in 0..3 {
for j in 0..3 {
if i + j == 2 {
break 'outer;
}
}
}while
适用于终止条件不是「取完一个迭代器」的场景。while let 在模式持续匹配时循环:
rust
while let Some(item) = stack.pop() {
println!("{item}");
}for
for x in iter 取得迭代器的所有权并消费它。遍历借用用 for x in &items 或 items.iter();可变借用用 &mut items。
rust
for (i, name) in ["a", "b"].iter().enumerate() {
println!("{i}: {name}");
}0..n 是半开区间,0..=n 含上界。for 不提供 C 式 for (i=0; i<n; i++) 语法;需要索引时用 enumerate 或单独的计数绑定。
不要在遍历同一集合时插入或删除元素。先收集要改的下标或项,再在循环外修改。
