🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

🔁 1. 基本循环类型

⚙️ 2. 循环控制语句

🔄 3. for 循环与迭代器

💡 4. 选择循环的建议

⚠️ 5. 注意所有权

📊 6. 循环的性能


img

Rust 提供了灵活且强大的循环结构,让你能高效地处理需要重复执行的任务。下面是对 Rust 中主要循环方式的梳理,以及一些使用建议。

🔁 1. 基本循环类型

Rust 主要有三种循环,应对不同场景:

循环类型 关键字 主要用途 退出条件
​无限循环​ loop 需手动退出的场景,如事件监听、重试机制 显式使用 break
​条件循环​ while 循环次数不确定,但条件可能变化,如读取输入 条件表达式求值为 false
​遍历循环​ for 遍历集合或区间,如数组、范围 迭代器耗尽(自动)
  • loop 循环​​:最简单的无限循环,​​必须手动使用 break 退出​​。break 后可跟一个表达式,其值会成为整个 loop 循环的返回值(注意返回值需用分号结束)。

    let mut counter = 0;
    let result = loop {
        counter += 1;
        if counter == 10 {
            break counter * 2; // loop 循环返回 20
        }
    };
    println!("The result is {}", result); // 输出:The result is 20
  • while 循环​​:在每次迭代前检查条件,条件为 true 则执行循环体。

    let mut number = 3;
    while number != 0 {
        println!("{}!", number);
        number -= 1;
    }
    println!("LIFTOFF!!!");
  • for 循环​​:Rust中​​最常用和最推荐​​的循环,用于遍历迭代器(如集合、范围)。它​​自动处理索引和边界​​,更安全简洁。

    // 遍历数组
    let a = [10, 20, 30, 40, 50];
    for element in a.iter() { // 或 &a, 或 for element in a into_iter
        println!("the value is: {}", element);
    }
    
    // 遍历范围 (Range)
    for number in (1..4).rev() { // rev() 方法反转范围,输出 3, 2, 1
        println!("{}!", number);
    }
    println!("LIFTOFF!!!");
    
    // 获取索引和值
    let v = vec!["one", "two", "three"];
    for (index, value) in v.iter().enumerate() {
        println!("Index: {}, Value: {}", index, value);
    }

⚙️ 2. 循环控制语句

控制循环的执行流程:

  • break​:立即​​退出当前循环​​(在 loop 中可带返回值)。
  • continue​:​​跳过当前迭代的剩余代码​​,直接进行下一次迭代。
    for i in 1..=10 {
        if i % 2 == 0 {
            continue; // 跳过偶数
        }
        if i == 7 {
            break; // 遇到 7 退出循环
        }
        println!("奇数: {}", i);
    }
  • ​循环标签​​:处理​​嵌套循环​​时,可以为循环打上标签(以 ' 开头),然后用 breakcontinue 控制指定标签的循环。
    'outer: for x in 0..10 {
        'inner: for y in 0..10 {
            if x % 2 == 0 {
                continue 'outer; // 跳到外层循环的下一次迭代
            }
            if y % 2 == 0 {
                continue 'inner; // 跳到内层循环的下一次迭代
            }
            println!("x: {}, y: {}", x, y);
        }
    }

🔄 3. for 循环与迭代器

for 循环是 ​​迭代器的语法糖​​。集合类型通常实现了 IntoIterator trait,有三种常用方式:

循环方式 含义与所有权变化 适用场景
for item in collection 获取 collection 的​​所有权​​,循环后它不能再被使用 需要消费集合时
for item in &collection ​不可变借用​collection 的每个元素 只需读取集合数据时
for item in &mut collection ​可变借用​collection 的每个元素 需要修改集合内元素时
let vec = vec![1, 2, 3];

// 获取所有权,循环后 vec 不再可用
for i in vec { ... } 

// 不可变借用,循环后仍可使用 vec
for i in &vec { ... } 

// 可变借用,可修改元素
for i in &mut vec { *i += 1; } 

你也可以为自定义类型实现 IntoIteratorIterator trait 来支持 for 循环。

💡 4. 选择循环的建议

  • ​优先使用 for 循环​​:在遍历已知集合或范围时,for 循环通常最安全、最简洁。
  • while 用于条件循环​​:当循环次数不确定,但有一个明确的条件需要持续检查时(例如读取用户输入直到特定值),使用 while 循环。
  • loop 用于明确需要无限循环或手动控制退出的场景​​:例如事件循环或需要重试直到成功的操作。

⚠️ 5. 注意所有权

在循环中,尤其是 for 循环,要注意​​所有权和借用规则​​。

  • 默认情况下,for item in collection 会获取集合的所有权。如果循环后还需要使用集合,应使用 for item in &collection(不可变借用)或 for item in &mut collection(可变借用)。

📊 6. 循环的性能

Rust 的循环和迭代器在编译期会进行大量优化,性能通常很好。对于​​性能敏感的代码​​,可以注意:

  • ​使用迭代器适配器​​(如 map, filter, fold 等)通常能和手写循环一样快,甚至更快,因为它们能更好地被编译器优化。
  • ​避免在循环体内进行不必要的内存分配​​。例如,可预先为 Vec 分配足够容量(Vec::with_capacity)。

希望这些信息能帮助你更好地理解和使用 Rust 的循环。如果你有具体的应用场景或疑问,我很乐意提供更多帮助。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐