Menu
CoddyTech

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 de parcourir 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
  • Indice & 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 bloc est une tranche, tu peux donc utiliser ses méthodes de tranche, par exemple, chunk.len() renvoie le nombre d’éléments dans ce bloc. Le dernier bloc peut être plus petit si le tableau n’est pas divisible uniformément.

Tu peux aussi chaîner .enumerate() à .chunks() pour obtenir à la fois un index 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() enveloppe chacune d’elles avec un compteur, de sorte que i est l’index du bloc et que chunk est la tranche.

  • Itérer avec mutation :

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

Défi

Facile

Crée un programme qui traite une liste de courses avec des articles et leurs prix, et propose différentes vues des données.

Le programme doit :

  1. Afficher le numéro et le prix de chaque article (en utilisant enumerate). Formater sous la forme 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 groupée contient 2 articles, afficher leur somme : Bundle N: $Price1 + $Price2 = $Sum. Si elle ne contient qu’un seul article, afficher : 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 et avec 2 décimales (par exemple, $2.48).

Indice : Tu peux chaîner des itérateurs, par exemple, prices.chunks(2).enumerate() te donne à la fois l’index du bloc et la tranche correspondante. Chaque chunk est une tranche : tu peux donc appeler chunk.len() dessus et accéder à ses éléments avec chunk[0], chunk[1], etc.

Format de sortie attendu pour les prix :
Utilise ${:.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
    // Indice : prices.iter().enumerate() produit des paires (index, &price)
    // Formatez les prix avec 2 décimales à l’aide de {:.2} ; consultez les instructions pour connaître le format exact


    println!("\nBundle Deals:");
    // TODO: Enchaînez chunks(2) et enumerate() : prices.chunks(2).enumerate()
    // Cela produit des paires (index, chunk) ; chaque chunk est une tranche, donc chunk.len() indique sa taille
    // Si chunk.len() == 2, affichez : "Bundle 1: $2.75 + $1.50 = $4.25"
    // Si chunk.len() == 1, affichez la ligne correspondant à l’article unique, comme indiqué dans les instructions
    // Utilisez {:.2} pour formater tous les prix avec 2 décimales


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


    println!("\nPrices after 10% discount:");
    // TODO: Affichez chaque prix après remise avec 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