迴圈(Loop)#
Rust 提供三種迴圈:loop、while、for,各有適合的使用場景。
1. loop#
loop 會 無限循環 ,直到遇到 break 才停止:
1
2
3
4
5
6
7
8
9
10
11
| fn main() {
let mut count = 0;
loop {
count += 1;
if count == 3 {
break;
}
println!("count = {count}");
}
}
|
輸出:
count = 1
count = 2
2. loop 回傳值#
loop 是表達式,可以透過 break 回傳值:
1
2
3
4
5
6
7
8
9
10
11
12
| fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2; // 回傳 20
}
};
println!("result = {result}"); // result = 20
}
|
3. 迴圈標籤(Loop Label)#
在巢狀迴圈中,break 和 continue 預設作用在最內層。
使用 標籤(label) 可以指定要操作哪一層迴圈:
1
2
3
4
5
6
7
8
9
10
| fn main() {
'outer: loop {
println!("進入外層迴圈");
loop {
println!("進入內層迴圈");
break 'outer; // 直接跳出外層迴圈
}
}
println!("結束");
}
|
4. while#
while 在條件為 true 時持續執行:
1
2
3
4
5
6
7
8
9
10
| fn main() {
let mut n = 3;
while n > 0 {
println!("{n}!");
n -= 1;
}
println!("發射!");
}
|
5. for 與範圍(Range)#
for 搭配範圍是 Rust 中最常見的迴圈寫法:
1
2
3
4
5
6
7
8
9
10
11
| fn main() {
// 1..5 不含 5
for i in 1..5 {
println!("{i}");
}
// 1..=5 含 5
for i in 1..=5 {
println!("{i}");
}
}
|
6. for 迭代集合#
for 可以直接迭代陣列或向量:
1
2
3
4
5
6
7
| fn main() {
let fruits = ["蘋果", "香蕉", "橘子"];
for fruit in fruits {
println!("{fruit}");
}
}
|
7. for 搭配 enumerate#
使用 .enumerate() 同時取得索引和值:
1
2
3
4
5
6
7
| fn main() {
let langs = ["Rust", "Python", "Kotlin"];
for (i, lang) in langs.iter().enumerate() {
println!("{i}: {lang}");
}
}
|
輸出:
0: Rust
1: Python
2: Kotlin
8. continue#
continue 跳過當次迭代,繼續下一次:
1
2
3
4
5
6
7
8
| fn main() {
for i in 1..=10 {
if i % 2 == 0 {
continue; // 跳過偶數
}
println!("{i}");
}
}
|
Reference#
https://doc.rust-lang.org/book/ch03-05-control-flow.html