循环语句 #
一、loop 循环 #
1.1 基本用法 #
loop 创建无限循环:
rust
fn main() {
let mut count = 0;
loop {
println!("计数: {}", count);
count += 1;
if count >= 5 {
break;
}
}
}
1.2 返回值 #
loop 可以返回值:
rust
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2; // 返回值
}
};
println!("结果: {}", result); // 20
}
1.3 循环标签 #
使用标签处理嵌套循环:
rust
fn main() {
let mut count = 0;
'outer: loop {
println!("外层循环 {}", count);
let mut remaining = 10;
loop {
println!(" 内层循环 {}", remaining);
if remaining == 9 {
break; // 只退出内层
}
if count == 2 {
break 'outer; // 退出外层
}
remaining -= 1;
}
count += 1;
}
println!("结束");
}
二、while 循环 #
2.1 基本用法 #
rust
fn main() {
let mut number = 3;
while number != 0 {
println!("{}!", number);
number -= 1;
}
println!("发射!");
}
2.2 条件循环 #
rust
fn main() {
let mut numbers = vec![1, 2, 3, 4, 5];
while !numbers.is_empty() {
let last = numbers.pop().unwrap();
println!("弹出: {}", last);
}
}
2.3 与 Option 配合 #
rust
fn main() {
let mut values = vec![Some(1), Some(2), None, Some(3)];
while let Some(Some(value)) = values.pop() {
println!("值: {}", value);
}
}
三、for 循环 #
3.1 遍历集合 #
rust
fn main() {
let fruits = vec!["苹果", "香蕉", "橙子"];
for fruit in fruits {
println!("水果: {}", fruit);
}
}
3.2 范围遍历 #
rust
fn main() {
// 1 到 4
for i in 1..5 {
println!("{}", i);
}
// 1 到 5(包含)
for i in 1..=5 {
println!("{}", i);
}
}
3.3 反向遍历 #
rust
fn main() {
for i in (1..=5).rev() {
println!("{}", i);
}
}
3.4 带索引遍历 #
rust
fn main() {
let fruits = vec!["苹果", "香蕉", "橙子"];
for (index, fruit) in fruits.iter().enumerate() {
println!("{}: {}", index, fruit);
}
}
3.5 可变遍历 #
rust
fn main() {
let mut numbers = vec![1, 2, 3, 4, 5];
for num in numbers.iter_mut() {
*num *= 2;
}
println!("{:?}", numbers); // [2, 4, 6, 8, 10]
}
四、循环控制 #
4.1 break #
break 用于退出循环:
rust
fn main() {
for i in 1..=10 {
if i == 5 {
break;
}
println!("{}", i);
}
// 输出 1 2 3 4
}
4.2 continue #
continue 用于跳过当前迭代:
rust
fn main() {
for i in 1..=5 {
if i == 3 {
continue;
}
println!("{}", i);
}
// 输出 1 2 4 5
}
4.3 带值的 break #
rust
fn main() {
let result = for i in 1..=10 {
if i == 5 {
break i * 2;
}
};
println!("结果: {:?}", result); // Some(10)
}
五、迭代器方法 #
5.1 常用方法 #
rust
fn main() {
let numbers = vec![1, 2, 3, 4, 5];
// map
let doubled: Vec<i32> = numbers.iter().map(|x| x * 2).collect();
println!("翻倍: {:?}", doubled);
// filter
let evens: Vec<&i32> = numbers.iter().filter(|x| *x % 2 == 0).collect();
println!("偶数: {:?}", evens);
// fold
let sum: i32 = numbers.iter().fold(0, |acc, x| acc + x);
println!("总和: {}", sum);
// find
let first_even = numbers.iter().find(|x| *x % 2 == 0);
println!("第一个偶数: {:?}", first_even);
}
5.2 链式调用 #
rust
fn main() {
let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let result: Vec<i32> = numbers
.iter()
.filter(|x| *x % 2 == 0)
.map(|x| x * 2)
.take(3)
.collect();
println!("结果: {:?}", result); // [4, 8, 12]
}
六、实践示例 #
6.1 斐波那契数列 #
rust
fn fibonacci(n: u32) -> u64 {
if n == 0 {
return 0;
}
let mut a = 0;
let mut b = 1;
for _ in 1..n {
let temp = a + b;
a = b;
b = temp;
}
b
}
fn main() {
for i in 0..10 {
println!("fibonacci({}) = {}", i, fibonacci(i));
}
}
6.2 九九乘法表 #
rust
fn main() {
for i in 1..=9 {
for j in 1..=i {
print!("{}×{}={:<2} ", j, i, i * j);
}
println!();
}
}
6.3 查找元素 #
rust
fn find_position(numbers: &[i32], target: i32) -> Option<usize> {
for (index, &value) in numbers.iter().enumerate() {
if value == target {
return Some(index);
}
}
None
}
fn main() {
let numbers = vec![10, 20, 30, 40, 50];
match find_position(&numbers, 30) {
Some(index) => println!("找到,索引: {}", index),
None => println!("未找到"),
}
}
七、总结 #
本章学习了:
loop无限循环while条件循环for迭代循环break和continue- 循环标签
- 迭代器方法
下一章,我们将学习模式匹配。
最后更新:2026-03-27