Boucle for améliorée
Fait partie de la section Fundamentals du Journey Rust de Coddy. Leçon 66 sur 75.
Il existe différentes façons d'itérer sur un tableau, en voici quelques-unes :
Considérez le tableau suivant :
let numbers = [1, 2, 3, 4, 5];Iterateur direct :
for num in numbers.iter() {} // Valeurs : 1, 2, 3, 4, 5
Index et valeur :
for (index, value) in numbers.iter().enumerate() { } // Valeurs : (0,1), (1,2), (2,3), (3,4), (4,5)
Tranches d'une taille spécifique :
for chunk in numbers.chunks(2) { } // Valeurs : [1,2], [3,4], [5]Chaque chunk est une tranche (slice), vous pouvez donc utiliser des méthodes de tranche dessus — par exemple,
chunk.len()renvoie le nombre d'éléments dans ce chunk. Le dernier chunk peut être plus petit si le tableau ne se divise pas équitablement.
Vous pouvez également enchaîner .enumerate() sur .chunks() pour obtenir à la fois l'indice et le chunk en même temps :
for (i, chunk) in numbers.chunks(2).enumerate() { }
// Valeurs : (0,[1,2]), (1,[3,4]), (2,[5])Ici, .chunks(2) produit d'abord les slices, puis .enumerate() enveloppe chacune d'elles avec un compteur — ainsi i est l'indice du chunk et chunk est la slice.
Iterate with mutation:
for num in numbers.iter_mut() { *num *= 2; } // Le tableau devient : [2, 4, 6, 8, 10]
Défi
FacileCréez un programme qui traite une liste de courses avec des articles et leurs prix, et fournit différentes vues des données.
Le programme doit :
- Afficher chaque numéro d'article et son prix (en utilisant
enumerate). Formatez commeItem N: $Price(par exemple,Item 1: $2.75). - Afficher les prix par paires (en utilisant
chunks) sous forme d'offres groupées ("bundle deals"). Si un groupe contient 2 articles, affichez la somme :Bundle N: $Price1 + $Price2 = $Sum. S'il n'a qu'un seul article, affichez :Bundle N: $Price. - Appliquer une remise de 10% à tous les prix (en utilisant
iter_mut). - Afficher les prix finaux remisés, chacun sur une nouvelle ligne, formatés avec 2 décimales (par exemple,
$2.48).
Hint: Vous pouvez enchaîner les itérateurs — par exemple, prices.chunks(2).enumerate() vous donne à la fois l'indice du tronçon et la tranche du tronçon. Chaque chunk est une tranche, vous pouvez donc appeler chunk.len() dessus et y accéder par indice avec chunk[0], chunk[1], etc.
Expected output format for prices:
Utilisez ${:.2} pour formater les prix avec 2 décimales.
Le texte exact est Bundle 4: $7.90.
Essayez vous-même
fn main() {
let mut prices = [2.75, 1.50, 5.00, 3.5, 4.1, 2.25, 7.9];
println!("Original Prices:");
// TODO: Utilisez enumerate() pour afficher le numéro et le prix de chaque article
// Hint: prices.iter().enumerate() donne des paires (index, &price)
// Formatez les prix à 2 décimales en utilisant {:.2}, voir les instructions pour le format exact
println!("\nBundle Deals:");
// TODO: Enchaînez chunks(2) et enumerate() ensemble : prices.chunks(2).enumerate()
// Cela donne des paires (index, chunk), chaque chunk est une slice, donc chunk.len() vous indique sa taille
// If chunk.len() == 2, print: "Bundle 1: $2.75 + $1.50 = $4.25"
// Si chunk.len() == 1, affichez la ligne de l'article unique décrite dans les instructions
// Utilisez {:.2} pour formater tous les prix à 2 décimales
// TODO: Utilisez iter_mut() pour appliquer une réduction de 10 % à tous les prix
// Hint: multipliez chaque *price par 0.9
println!("\nPrices after 10% discount:");
// TODO: Affichez chaque prix réduit formaté à 2 décimales
// Le format de sortie attendu est indiqué dans les instructions
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fundamentals
4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloRaccourcis arithmétiquesOpérateurs de comparaisonComparaison de chaînes7Entrées/Sorties de base
Afficher dans la consoleLire la saisie utilisateurRécapitulatif - Jusqu'à 120Récapitulatif - Vrai ou Faux5Opérateurs, partie 2
Opérateurs logiques, partie 1Opérateurs logiques, partie 2Récapitulatif - Logique simpleOpérateurs logiques, partie 311Fonctions
Déclaration de fonctionsParamètres et argumentsValeurs de retourValeurs de retour multiplesRécapitulatif - Fonction SigmaRécapitulatif - Fonction de validation14Parcourir les tableaux
Guide sur les RangeBoucle for amélioréeEmprunt dans une boucleOpérations courantes sur les tableaux3Variables - Partie 2
Déclaration de typeConventions de nommageInférence de typeRécapitulatif - Initialiser des variablesConversion de type9Boucles
Boucle For sur une sérieBoucle WhileBreakContinueBoucles imbriquéesÉtiquettes de boucleBoucle infinieRécapitulatif - Entrée dynamique12Bases des tableaux
Déclaration de tableauxTableau comme paramètreAccès aux élémentsModification de tableauxRécapitulatif - Affichage formaté d'un tableau15Opérations sur les chaînes
Méthodes de chaînesMacro format!Conversion de chaînesRécapitulatif - FormatEntraînez-vous par vous-même : Compilateur Rust en ligne