Menu
Coddy logo textTech

Itérer sur une Map

Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 26 sur 65.

Lorsque vous travaillez avec les collections Map, vous avez souvent besoin de traiter chaque paire clé-valeur. La méthode forEach offre un moyen propre d'itérer à travers toutes les entrées d'une map, vous donnant accès à la fois à la clé et à sa valeur correspondante.

La méthode forEach prend une fonction comme argument. Cette fonction reçoit deux paramètres : la clé et la valeur pour chaque entrée de la map. La méthode appelle automatiquement votre fonction une fois pour chaque paire clé-valeur de la map.

Map<String, int> studentScores = {
  'Alice': 85,
  'Bob': 92,
  'Charlie': 78
};

studentScores.forEach((name, score) {
  print('$name scored $score points');
});
// Sortie :
// Alice a obtenu 85 points
// Bob a obtenu 92 points
// Charlie a obtenu 78 points

Cette approche est bien plus pratique que d'accéder manuellement à chaque clé ou d'essayer de parcourir la map en utilisant d'autres méthodes. La méthode forEach gère toute la logique d'itération pour vous, rendant votre code plus propre et plus lisible lorsque vous devez traiter chaque entrée d'une map.

challenge icon

Défi

Facile

Créez un programme qui gère le système de rapport des ventes quotidiennes d'un restaurant en analysant les articles du menu et leurs données de vente. Votre programme doit :

  1. Lire une chaîne de caractères en entrée représentant le nom du restaurant
  2. Lire plusieurs paires d'entrées représentant les articles du menu et leurs montants de ventes (la saisie se terminera lorsque vous recevrez "sales_done")
  3. Créer une Map pour stocker chaque article du menu comme clé et son montant de ventes comme valeur
  4. Utiliser la méthode forEach pour parcourir les données de vente et calculer le revenu total
  5. Utiliser à nouveau la méthode forEach pour identifier l'article le plus vendu (montant de ventes le plus élevé)
  6. Afficher le rapport de ventes exactement dans le format indiqué ci-dessous

Par exemple, si le nom du restaurant est "Mario's Pizza" et que les données de vente incluent "Margherita Pizza" avec 450, "Caesar Salad" avec 280, "Garlic Bread" avec 320, "Tiramisu" avec 180, votre programme doit afficher :

Restaurant: Mario's Pizza
Daily Sales Report:
Margherita Pizza: $450
Caesar Salad: $280
Garlic Bread: $320
Tiramisu: $180
Total Revenue: $1230
Best Selling Item: Margherita Pizza ($450)
Status: Sales report generated successfully

Si le nom du restaurant est "Sushi Express" et que les données de vente incluent "California Roll" avec 380, "Salmon Sashimi" avec 520, "Miso Soup" avec 150, votre programme doit afficher :

Restaurant: Sushi Express
Daily Sales Report:
California Roll: $380
Salmon Sashimi: $520
Miso Soup: $150
Total Revenue: $1050
Best Selling Item: Salmon Sashimi ($520)
Status: Sales report generated successfully

Si le nom du restaurant est "Burger Palace" et que les données de vente incluent "Classic Burger" avec 600, "French Fries" avec 400, "Milkshake" avec 250, "Onion Rings" avec 180, votre programme doit afficher :

Restaurant: Burger Palace
Daily Sales Report:
Classic Burger: $600
French Fries: $400
Milkshake: $250
Onion Rings: $180
Total Revenue: $1430
Best Selling Item: Classic Burger ($600)
Status: Sales report generated successfully

Votre programme doit utiliser la méthode forEach pour parcourir les entrées de la Map. D'abord, utilisez forEach pour afficher chaque article du menu et son montant de ventes, tout en calculant le revenu total. Ensuite, utilisez à nouveau forEach pour trouver l'article ayant le montant de ventes le plus élevé. Le format d'entrée sera : le nom du restaurant, puis alternativement les noms des articles du menu et les montants de ventes (sous forme de chaînes de caractères qui doivent être converties en entiers), se terminant par "sales_done".

Aide-mémoire

La méthode forEach vous permet de parcourir toutes les paires clé-valeur d'une Map. Elle prend une fonction qui reçoit deux paramètres : la clé et la valeur de chaque entrée.

Map<String, int> studentScores = {
  'Alice': 85,
  'Bob': 92,
  'Charlie': 78
};

studentScores.forEach((name, score) {
  print('$name scored $score points');
});
// Sortie :
// Alice scored 85 points
// Bob scored 92 points
// Charlie scored 78 points

La méthode forEach appelle automatiquement votre fonction une fois pour chaque paire clé-valeur de la map, ce qui la rend pratique pour traiter toutes les entrées sans logique d'itération manuelle.

Essayez vous-même

import 'dart:io';

void main() {
  // Lire le nom du restaurant
  String? restaurantName = stdin.readLineSync();
  
  // Créer une Map pour stocker les articles du menu et leurs montants de ventes
  Map<String, int> salesData = {};
  
  // Lire les articles du menu et les montants de ventes jusqu'à "sales_done"
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "sales_done") {
      break;
    }
    String menuItem = input!;
    String? salesAmountStr = stdin.readLineSync();
    int salesAmount = int.parse(salesAmountStr!);
    salesData[menuItem] = salesAmount;
  }
  
  // TODO: Écrivez votre code ci-dessous
  // Utiliser forEach pour calculer le revenu total et afficher les données de vente
  // Utiliser forEach à nouveau pour trouver l'article le plus vendu
  
  // Afficher le rapport de ventes dans le format requis
  print("Restaurant: $restaurantName");
  print("Daily Sales Report:");
  // Afficher chaque article et calculer le total
  // Trouver et afficher l'article le plus vendu
  // Afficher le revenu total et le statut
}
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 Logique & Flux