1. ホーム
  2. for-loop

[解決済み] Rustで逆順のforループを作るには?

2022-12-23 09:48:45

質問

編集者注:この質問はRust 1.0がリリースされる前にされ .. "range"演算子が導入される前に質問されたものです。質問のコードはもはや現在のスタイルを表していませんが、以下のいくつかの回答は Rust 1.0 以降で動作するコードを使用しています。

で遊んでいたのですが Rust by Example ウェブサイト で遊んでいて、fizzbuzzを逆に出力したいと思いました。試したのは以下の通りです。

fn main() {
    // `n` will take the values: 1, 2, ..., 100 in each iteration
    for n in std::iter::range_step(100u, 0, -1) {
        if n % 15 == 0 {
            println!("fizzbuzz");
        } else if n % 3 == 0 {
            println!("fizz");
        } else if n % 5 == 0 {
            println!("buzz");
        } else {
            println!("{}", n);
        }
    }
}

コンパイルエラーは出ませんでしたが、何も出力されません。100から1まで反復処理するにはどうしたらいいでしょうか?

どのように解決するのですか?

<ブロッククオート

編集者注:この質問は、Rust 1.0より前のRustの部分について言及しています。最新のコードについては、他の回答を見てください。

あなたのコードが動作しないのは uint の値 -1 は uint の最大値に等しいからです。range_step イテレータはオーバーフローを検出すると即座に停止します。int を使用すると、これが修正されます。

std::iter::range_step(100i, 0, -1)

また、イテレータを反転させるには rev() .

for n in range(0u, 100).rev() { ... }

ただし、これは100->1ではなく、99->0からになることに注意してください。