編集者注:この質問は、Rust 1.0がリリースされ、
..
「範囲」演算子が導入されました。質問のコードは現在のスタイルを表していませんが、以下の回答ではRust 1.0以降で動作するコードを使用しています。
Rust by ExampleのWebサイト で遊んでいて、逆に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 that predate Rust 1.0。最新のコードについては他の回答をご覧ください。
値-1のuint
はuintの最大値に等しいため、コードは機能しません。 range_stepイテレータは、オーバーフローを検出するとすぐに停止します。 intを使用すると、これが修正されます。
_std::iter::range_step(100i, 0, -1)
_
rev()
でイテレータを逆にすることもできます。
_for n in range(0u, 100).rev() { ... }
_
ただし、これは100-> 1ではなく99-> 0であることに注意してください。
フォワードループは次のようなものです。
for x in 0..100 {
println!("{}", x);
}
そして、逆ループは Iterator::rev
順序を逆にする:
for x in (0..100).rev() {
println!("{}", x);
}