Menu
Coddy logo textTech

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 & valeur :

    for (index, value) in numbers.iter().enumerate() { }
    // Valeurs : (0,1), (1,2), (2,3), (3,4), (4,5)
  • Slices de taille spécifique :

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

    Chaque chunk est une slice, vous pouvez donc utiliser des méthodes de slice 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() après .chunks() pour obtenir à la fois un index 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'index du chunk et chunk est le slice.

  • Iterer 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 avec des articles et leurs prix, et fournit différentes vues des données.

Le programme doit :

  1. Afficher chaque numéro d'article et son prix (en utilisant enumerate). Formatez comme ceci : 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 un lot contient 2 articles, affichez la somme : Bundle N: $Price1 + $Price2 = $Sum. S'il 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 remisés, chacun sur une nouvelle ligne, formatés à 2 decimal places près (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 lot et la tranche du lot en même temps. Chaque chunk est une tranche, vous pouvez donc appeler chunk.len() dessus et y accéder avec chunk[0], chunk[1], etc.

Expected output format for prices:
Utilisez ${:.2} pour formater les prix à 2 decimal places.

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} — p.ex., "Item 1: $2.75"


    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() indique sa taille
    // If chunk.len() == 2, print: "Bundle 1: $2.75 + $1.50 = $4.25"
    // Si chunk.len() == 1, affichez : "Bundle 4: $7.90"
    // Utilisez {:.2} pour formater tous les prix à 2 décimales


    // TODO: Utilisez iter_mut() pour appliquer une remise de 10 % à tous les prix
    // Hint: multipliez chaque *price par 0.9


    println!("\nPrices after 10% discount:");
    // TODO: Affichez chaque prix remisé formaté à 2 décimales
    // Attendu : "$2.48" etc.

}
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 Fundamentals