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 rapports des ventes quotidiennes d’un restaurant en analysant les plats du menu et leurs données de vente. Votre programme doit :

  1. Lire une chaîne de caractères représentant le nom du restaurant
  2. Lire plusieurs paires de données représentant les plats du menu et leurs montants de vente (la saisie se terminera lorsque vous recevrez "sales_done")
  3. Créer une Map pour stocker chaque plat du menu comme clé et son montant de vente comme valeur
  4. Utiliser la méthode forEach pour parcourir les données de vente et calculer le chiffre d’affaires total
  5. Utiliser à nouveau la méthode forEach pour identifier le plat le plus vendu (montant de vente le plus élevé)
  6. Afficher le rapport des ventes dans le format exact présenté 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 et "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 et "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 et "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. Utilisez d’abord forEach pour afficher chaque plat du menu et son montant de vente, tout en calculant le chiffre d’affaires total. Utilisez ensuite à nouveau forEach pour trouver le plat dont le montant de vente est le plus élevé. Le format de saisie sera le suivant : le nom du restaurant, puis les noms des plats du menu et leurs montants de vente en alternance (sous forme de chaînes de caractères qui doivent être converties en entiers), et enfin "sales_done".

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

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