编者注:在Rust 1.0发布之前询问了这个问题并引入了
..
“range”运算符。问题的代码不再代表当前的样式,但下面的一些答案使用的代码可以在Rust 1.0及以后版本中使用。
我正在Rust by Example website上玩,并希望反过来打印出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?
答案 0 :(得分:73)
正向循环是这样的:
for x in 0..100 {
println!("{}", x);
}
通过调用Iterator::rev
来反转顺序来完成反向循环:
for x in (0..100).rev() {
println!("{}", x);
}
答案 1 :(得分:19)
编者注:这个问题是指在Rust 1.0之前的Rust部分。查看最新代码的其他答案。
您的代码不起作用,因为值{-1}的uint
等于uint的最大值。检测到溢出后,range_step迭代器立即停止。使用int修复此问题。
std::iter::range_step(100i, 0, -1)
您还可以使用rev()
反转迭代器。
for n in range(0u, 100).rev() { ... }
虽然请注意这将是99-> 0,而不是100-> 1.