Menu
Coddy logo textTech

Boucle for améliorée

Fait partie de la section Fondamentaux 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ère le tableau suivant :

let numbers = [1, 2, 3, 4, 5];
  • Itérateur direct :

    for num in numbers.iter() {}
    // Valeurs : 1, 2, 3, 4, 5
  • Index & 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 tranche est une slice, vous pouvez donc utiliser des méthodes de slice dessus. Par exemple, chunk.len() renvoie le nombre d’éléments contenus dans cette tranche. La dernière tranche peut être plus petite si le tableau ne se divise pas uniformément.

Vous pouvez également enchaîner .enumerate() à .chunks() pour obtenir à la fois un indice et le bloc correspondant :

for (i, chunk) in numbers.chunks(2).enumerate() { }
// Valeurs : (0,[1,2]), (1,[3,4]), (2,[5])

Ici, .chunks(2) produit d’abord les tranches, puis .enumerate() entoure chacune d’elles d’un compteur ; ainsi, i est l’indice du bloc et chunk est la tranche.

  • Itérer avec mutation :

    for num in numbers.iter_mut() { 
    	*num *= 2;
    }
    // Le tableau devient : [2, 4, 6, 8, 10]
challenge icon

Défi

Facile

Créez un programme qui traite une liste de courses contenant des articles et leurs prix, et qui fournit différentes vues des données.

Le programme doit :

  1. Afficher le numéro et le prix de chaque article (en utilisant enumerate). Formatez-les ainsi : Item N: $Price (par exemple, Item 1: $2.75).
  2. Afficher les prix par paires (en utilisant chunks) sous forme d’« offres groupées ». Si une offre contient 2 articles, affichez la somme : Bundle N: $Price1 + $Price2 = $Sum. Si elle ne contient qu’un seul article, affichez : Bundle N: $Price.
  3. Appliquer une remise de 10 % à tous les prix (en utilisant iter_mut).
  4. Afficher les prix finaux après remise, chacun sur une nouvelle ligne, avec un format de 2 décimales (par exemple, $2.48).

Conseil : Vous pouvez enchaîner les itérateurs, par exemple, prices.chunks(2).enumerate() vous fournit à la fois l’indice du bloc et la tranche du bloc. Chaque chunk est une tranche ; vous pouvez donc appeler chunk.len() dessus et y accéder avec chunk[0], chunk[1], etc.

Format de sortie attendu pour les prix :
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}, consultez les instructions pour le format exact


    println!("\nBundle Deals:");
    // TODO: Chaînez chunks(2) et enumerate() ensemble : prices.chunks(2).enumerate()
    // Cela donne des paires (index, chunk), chaque chunk est une slice, donc chunk.len() 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: Use iter_mut() to apply a 10% discount to all prices
    // 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

}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux

Entraînez-vous par vous-même : Compilateur Rust en ligne