Note de l'éditeur: cette question a été posée avant Rust 1.0 a été publié et le
..
L'opérateur "range" a été introduit. Le code de la question ne représente plus le style actuel, mais certaines réponses ci-dessous utilisent du code qui fonctionnera dans Rust 1.0 et versions ultérieures).
Je jouais sur le site Rust by Example et je voulais imprimer fizzbuzz à l'envers. Voici ce que j'ai essayé:
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);
}
}
}
Il n'y a pas eu d'erreurs de compilation, mais cela n'a rien imprimé. Comment puis-je itérer de 100 à 1?
Note de l'éditeur: cette question fait référence à des parties de Rust qui sont antérieures à Rust 1.0. Consultez les autres réponses pour obtenir un code à jour.).
Votre code ne fonctionne pas car un uint
de valeur -1 est égal à la valeur maximale de uint. L'itérateur range_step s'arrête immédiatement lors de la détection d'un débordement. L'utilisation d'un int corrige cela.
std::iter::range_step(100i, 0, -1)
Vous pouvez également inverser un itérateur avec rev()
.
for n in range(0u, 100).rev() { ... }
Notez cependant que ce sera de 99-> 0, plutôt que 100-> 1.
Une boucle directe est comme ceci:
for x in 0..100 {
println!("{}", x);
}
Et une boucle inverse se fait en appelant Iterator::rev
pour inverser l'ordre:
for x in (0..100).rev() {
println!("{}", x);
}