Skip to content

循环

三种循环: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 &itemsitems.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 或单独的计数绑定。

不要在遍历同一集合时插入或删除元素。先收集要改的下标或项,再在循环外修改。

参考

基于 MIT 许可发布