Rust の範囲

Nilesh Katuwal 2023年6月21日
  1. Rust で範囲表記 a..b を使用する
  2. Rustで範囲表記a..=bを使用する
  3. Rust の C の for ループとしての a..b
Rust の範囲

この記事では、Rust での範囲の作成について学びます。

Rust で範囲表記 a..b を使用する

for in 構文を使用して Iterator を反復処理することができます。 イテレータを生成する最も簡単な方法の 1つは、範囲表記 a..b を使用することです。

これは、最も一般的な表記法の 1つです。 これにより、a (包括的) から b (排他的) までの範囲の値が 1 ステップずつ生成されます。

範囲には、時間の開始と終了の両方が含まれます。 そして、範囲に末尾を含めたい場合は、範囲構文 a..=b を使用してこれを行うことができます。

例:

fn main() {
    for i in 1..10 {
        if i % 5 == 0 {
            println!("hellothere");
        } else if i % 2 == 0 {
            println!("hello");
        } else if i % 4 == 0 {
            println!("there");
        } else {
            println!("{}", i);
        }
    }
}

出力:

1
hello
3
hello
hellothere
hello
7
hello
9

ここで、n は、各反復で 1, 2, ..., 10 の値を取ります。

Rustで範囲表記a..=bを使用する

代わりに、a..=b は両端を含む range にも使用できます。 上記のコードは、次のように書くこともできます。

fn main() {
    for i in 1..=10 {
        if i % 5 == 0 {
            println!("hellothere");
        } else if i % 2 == 0 {
            println!("hello");
        } else if i % 4 == 0 {
            println!("there");
        } else {
            println!("{}", i);
        }
    }
}

出力:

1
hello
3
hello
hellothere
hello
7
hello
9
hellothere

ここで、n は、各反復で 1, 2, ..., 10 の値も取ります。

Rust の C の for ループとしての a..b

a..b 構文は、C の for ループの動作と同様に、数値の範囲を反復処理するために使用できます。

for i in 0..3 {
    println!("{}", i);
}

インデックスと配列の要素の両方が必要な場合は、Iterator::enumerate メソッドがこれを実現する慣用的な方法です。

fn main() {
    let values = ["rust", "rust1", "rust2"];

    for (x, y) in values.iter().enumerate() {
        println!("The string for {} is {}", x, y);
    }
}

出力:

The string for 0 is rust
The string for 1 is rust1
The string for 2 is rust2