How to make a reverse ordered for loop in Rust?

Tybalt picture Tybalt · Aug 6, 2014 · Viewed 40.5k times · Source

Editor's note: This question was asked before Rust 1.0 was released and the .. "range" operator was introduced. The question's code no longer represents the current style, but some answers below uses code that will work in Rust 1.0 and onwards.

I was playing on the Rust by Example website and wanted to print out fizzbuzz in reverse. Here is what I tried:

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?

Answer

Luxspes picture Luxspes · Jul 27, 2015

A forward loop is like this:

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

And a reverse loop is done by calling Iterator::rev to reverse the order:

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