📜  rust range step - Rust (1)

📅  最后修改于: 2023-12-03 15:19:52.952000             🧑  作者: Mango

Rust Range Step

在 Rust 中,Range Step 用于创建一个范围,并指定步长。步长可以是任意整数。

该特性可以方便地创建自定义的迭代器,也可以用于直接生成某个区间的数组/向量等,并且在一些算法中也非常有用。

创建 Range Step

通过 ..= 运算符可以创建一个包含两端点的范围(包含右端点)。

let range = 0..=10;  // 包含 0 和 10

创建 Range Step 可以在 Range 后加上步长。

let range = (0..=10).step_by(2);  // 包含 0 2 4 6 8 10 的迭代器
生成数组

Range Step 可以生成一个包含指定元素的数组或向量。

let arr: Vec<i32> = (0..=10).step_by(2).collect();  // 包含 0 2 4 6 8 10 的 Vec
作为一个迭代器

可以通过 for in 进行迭代,也可以使用 Iterator 接口中提供的各种方法进行操作。

let range = (0..=10).step_by(2);  // 包含 0 2 4 6 8 10 的迭代器

for n in range {
    println!("{}", n);  // 输出每一个元素
}

let sum: i32 = (0..=10).step_by(2).sum();  // 求 0 2 4 6 8 10 元素之和
let max = (0..=10).step_by(2).max();  // 找出 0 2 4 6 8 10 中最大的元素
let any_odd = (0..=10).step_by(2).any(|x| x % 2 != 0);  // 判断是否有任何奇数
示例代码

下面是一段计算 Fibonacci 数列的示例代码。使用 Step Range 可以只取偶数项,并用它们计算和。

fn main() {
    let (mut a, mut b, mut sum) = (0, 1, 0);

    while b <= 4000000 {
        if b % 2 == 0 {
            sum += b;
        }
        let c = a + b;
        a = b;
        b = c;
    }

    println!("{}", sum);  // 输出 4613732
}