如何为循环进行反向排序?

编者按: 这个问题是在 Rust 1.0发布和引入 ..“ range”操作符之前提出的。问题的代码不再代表当前的风格,但下面的一些答案使用的代码将在 Rust 1.0及以后的版本中工作。

我当时正在使用 例子网站,想把嘶嘶声反过来打印出来。以下是我试过的方法:

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);
}
}
}

There were no compilation errors, but it did not print out anything. How do I iterate from 100 to 1?

89655 次浏览

编者按: 这个问题涉及到 Rust 1.0之前的部分内容。查看最新代码的其他答案。

您的代码无法工作,因为值为 -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。

正向循环是这样的:

for x in 0..100 {
println!("{}", x);
}

通过调用 Iterator::rev来反向循环:

for x in (0..100).rev() {
println!("{}", x);
}