Rust 常用语法速记 - 循环

Rust 提供了强大而灵活的循环控制结构,主要包括 loopwhilefor三种循环方式。

1. loop 循环

loop是 Rust 中最简单的循环结构,它会无限循环 执行代码块,直到遇到 break语句。

基本用法

rust 复制代码
let mut count = 0;

loop {
    println!("Count: {}", count);
    count += 1;
    
    if count == 5 {
        break; // 退出循环
    }
}

返回值

loop循环可以返回值,通过 break表达式后跟值来实现:

rust 复制代码
let mut count = 0;  
  
let result = loop {  
    count += 1;  
    if count == 10 {  
        break count * 2; // 循环返回值为 20    }  
};  
println!("The result is: {}", result); // 输出: The result is: 20

2. while 循环

while循环在条件为真时重复执行代码块,每次迭代前都会检查条件。

基本用法

rust 复制代码
let mut count = 3;  
  
while count > 0 {  
    println!("T-minus {}...", count);  
    count -= 1;  
}  
  
println!("Liftoff!");

while let 循环

while let是 Rust 中的一种模式匹配循环,常用于处理枚举或 Option类型:

rust 复制代码
let mut stack = Vec::new();  
stack.push(1);  
stack.push(2);  
stack.push(3);  
  
while let Some(top) = stack.pop() {  
    println!("栈顶元素: {}", top);  
}

3. for 循环

for循环用于遍历集合,是 Rust 中最常用且最安全的迭代方式。

遍历集合

rust 复制代码
let numbers = [10, 20, 30, 40, 50];

// 方法1: 使用 iter()
for number in numbers.iter() {
    println!("Number: {}", number);
}

// 方法2: 直接遍历(数组会自动转换为迭代器)
for number in numbers {
    println!("Number: {}", number);
}

使用 enumerate() 获取索引

rust 复制代码
let numbers = [10, 20, 30, 40, 50];  
  
for (index, number) in numbers.iter().enumerate() {  
    println!("Index: {}, Number: {}", index, number);  
}

使用 Range

Rust 的标准库提供了 Range,可用于生成数字序列:

rust 复制代码
// 正向范围 (1..4): 1, 2, 3for i in 1..4 {  
    println!("向上计数: {}", i);  
}  
  
// 反向范围  
for countdown in (1..=3).rev() { // (1..=3): 1, 2, 3  
    println!("倒计时: {}", countdown);  
}

4. 循环控制语句

Rust 提供了 breakcontinue来控制循环流程。

break 语句

break用于立即退出循环​:

rust 复制代码
let mut number = 0;

loop {
    if number > 3 {
        break; // 当 number > 3 时退出循环
    }
    number += 1;
}

continue 语句

continue用于跳过当前迭代,继续下一次迭代:

rust 复制代码
for number in 1..=5 {  
    if number % 2 == 0 {  
        continue; // 跳过偶数  
    }  
    println!("奇数: {}", number);  
}

5. 循环标签

Rust 允许为循环指定标签 ,这在嵌套循环中特别有用,可以精确控制哪个循环被 breakcontinue影响。

rust 复制代码
'outer: for x in 0..3 {  
    'inner: for y in 0..3 {  
        if x == 1 && y == 1 {  
            break 'outer; // 直接退出外层循环  
        }  
        if y == 0 {  
            continue 'inner; // 继续内层循环的下一次迭代  
        }  
        println!("x: {}, y: {}", x, y);  
    }  
}

6. 使用建议与最佳实践

  1. 优先选择 for 循环 ​:当需要遍历集合时,for循环因其安全性和简洁性而成为首选,它避免了索引越界的风险。for循环默认使用 into_iter(),这会移动 ​(take ownership)集合的所有权。如果只想读取 数据,使用 .iter();如果需要修改 数据,使用 .iter_mut()

  2. loop 适用于无限循环或需显式退出的场景 ​:当需要无限循环或循环退出条件比较复杂时,loop更合适。使用无限循环时虽然 while trueloop运行时行为相同,但 ​loop关键字为编译器提供了更强的确定性,能进行更准确的流程分析,避免不必要的警告。

  3. while 适用于条件控制循环 ​:当循环次数由条件决定,且条件可能在循环过程中改变时,使用 while循环。

  4. 利用循环返回值 ​:loop可以通过 break返回值,这在需要从循环中获取结果时非常有用。

  5. 使用标签管理复杂嵌套循环​:对于多层嵌套循环,使用标签可以更清晰地控制流程。

  6. 优先使用迭代器适配器 ​:对于集合操作,优先考虑使用 mapfilterfoldsum等迭代器方法,而非手动编写循环。这不仅是 Rust 的惯用法,通常性能也更优。

  7. 利用 enumerate获取索引 ​:需要在循环中同时使用索引和值时,使用 enumerate()方法,而不是退回到手动索引的方式。

相关推荐
易协同低代码2 小时前
KK部署与配置
后端
郭京京2 小时前
goweb内置的响应1
后端·go
EvanSun__2 小时前
Flask 框架引入
后端·python·flask
l1t2 小时前
DeepSeek辅助编写的利用quick_xml把xml转为csv的rust程序
xml·开发语言·人工智能·rust·解析器·quick-xml
pianmian13 小时前
Spring 项目骨架
java·后端·spring
小程序设计4 小时前
【springboot+vue】高校迎新平台管理系统(源码+文档+调试+基础修改+答疑)
vue.js·spring boot·后端
海梨花4 小时前
字节一面 面经(补充版)
jvm·redis·后端·面试·juc
野生程序员y4 小时前
深入解析Spring AOP核心原理
java·后端·spring
波波烤鸭4 小时前
Spring Boot 原理与性能优化实战
spring boot·后端·性能优化