在 Rust 中,for
循环是一种用于迭代集合(如数组、切片、向量、字符串、映射、通道等)或其他可迭代对象的方式。Rust 的 for
循环语法相对直观,并且与许多其他编程语言中的 for
循环类似。
以下是 for
循环在 Rust 中的一些常见用法:
迭代数组或切片
let numbers = [1, 2, 3, 4, 5];for number in numbers.iter() {println!("{}", number);
}
或者,如果你确定 numbers
是可变的,并且你不需要返回所有权,可以直接使用 into_iter()
:
let numbers = [1, 2, 3, 4, 5];for number in numbers.into_iter() {println!("{}", number);
}
从 Rust 1.0 开始,可以使用更简洁的语法直接迭代数组:
let numbers = [1, 2, 3, 4, 5];for number in &numbers {println!("{}", number);
}
或者,如果数组是可变的,你可以直接迭代它:
let mut numbers = [1, 2, 3, 4, 5];for number in numbers.iter_mut() {*number *= 2; // 修改每个元素的值
}
迭代字符串中的字符
let text = "Hello, Rust!";for character in text.chars() {println!("{}", character);
}
迭代映射(HashMap)的键值对
use std::collections::HashMap;let mut scores = HashMap::new();
scores.insert("Alice", 100);
scores.insert("Bob", 90);for (name, score) in &scores {println!("{}: {}", name, score);
}
迭代范围
for i in 0..5 { // 不包含 5println!("{}", i);
}for i in 0..=5 { // 包含 5println!("{}", i);
}
迭代枚举值
enum Color {Red,Green,Blue,
}let colors = [Color::Red, Color::Green, Color::Blue];for color in colors.iter() {match color {Color::Red => println!("Red"),Color::Green => println!("Green"),Color::Blue => println!("Blue"),}
}
使用 C 风格的 for 循环
虽然 Rust 推荐使用迭代器的 for
循环,但有时你可能需要更底层的控制,可以使用 range
函数和 to
方法来创建一个范围,并使用 C 风格的 for
循环:
let mut sum = 0;
for i in 0..10 {sum += i;
}
println!("Sum: {}", sum);
使用 while
循环进行迭代
虽然这不是一个 for
循环,但有时候 while
循环可以用于实现类似的功能,尤其是在需要基于某种条件迭代时:
let mut i = 0;
while i < 5 {println!("{}", i);i += 1;
}
注意,Rust 中的 for
循环通常比 while
循环更受欢迎,因为它们提供了更清晰的语法,并且更易于理解和维护。在使用 for
循环时,通常不需要手动管理索引或迭代器,因为 Rust 会为你处理这些细节。