Comment faire un inverse ordonné pour la boucle dans la rouille?
Note de L'Éditeur: cette question a été posée avant la sortie de Rust 1.0 et 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 au-delà.
Je jouais sur le site web 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 avait pas d'erreurs de compilation, mais il n'a rien imprimé. Comment faire Je itère de 100 à 1?
2 réponses
Note de L'Éditeur: cette question fait référence à des parties de Rust antérieures à Rust 1.0. Regardez d'autres réponses pour le 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 après la détection du 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 99 - > 0, plutôt que 100 - > 1.
Une boucle avant est comme ceci:
for x in 0..100 {
println!("{}", x);
}
Et une boucle de retournement se fait en appelant Iterator::rev
pour inverser l'ordre:
for x in (0..100).rev() {
println!("{}", x);
}