Skip to content

Rust 中的范围表达式

在学习切片时候了解到了 str[0..5] 这种写法,0..5 就是一个范围表达式,表示从索引 0 到索引 5(不包含 5)的部分字符串。

Rust 中的范围表达式有多种形式:

范围表达式类型表示的范围
start..endstd::ops::Rangestart ≤ x < end
start..std::ops::RangeFromstart ≤ x
..endstd::ops::RangeTox < end
..std::ops::RangeFull-
start..=endstd::ops::RangeInclusivestart ≤ x ≤ end
..=endstd::ops::RangeToInclusivex ≤ end

范围表达式本质是各种 Range 实例的语法糖。如下面的两行代码是等价的:

rust
let x = 0..5;
let y = std::ops::Range {start: 0, end: 5};

常见用法

各种 Range 都实现了 Iterator trait,可以用于切片、迭代器等场景。

切片

rust
let s = "Hello, world!";
let hello = &s[0..5]; // "Hello"
let world = &s[7..];  // "world!"

迭代器

rust
for i in 0..5 {
    println!("{}", i); // 输出 0, 1, 2, 3, 4
}

常见方法

Range 类型实现了 Iterator trait,因此可以使用迭代器的方法来操作范围。

下面列一些 Range 常用的方法:

rev:反转

rust
for i in (1..=5).rev() {
    println!("{}", i); // 输出 5, 4, 3, 2, 1
}

step_by:设置步长

rust
for i in (1..=5).step_by(2) {
    println!("{}", i); // 输出 1, 3, 5
}

sum:求和

rust
let sum: i32 = (1..=5).sum(); // 计算 1 到 5 的总和

参考

Released under the MIT License