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 pointsCette 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.
Défi
FacileCré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 :
- Lire une chaîne de caractères en entrée représentant le nom du restaurant
- 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") - Créer une Map pour stocker chaque article du menu comme clé et son montant de ventes comme valeur
- Utiliser la méthode
forEachpour parcourir les données de vente et calculer le revenu total - Utiliser à nouveau la méthode
forEachpour identifier l'article le plus vendu (montant de ventes le plus élevé) - 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 successfullySi 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 successfullySi 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 successfullyVotre 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 pointsLa 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
}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
1Manipulation avancée des listes
Propriétés de liste : first & lastÉtat de la liste : isEmpty & isNotEmptyInverser une listeAjouter à une liste : insertSuppression dans une liste : removeWhereRechercher dans une liste : indexOfTrier une listeMélanger une listeRécapitulatif - Organisateur de liste4Manipulation avancée des Maps
Itérer sur une MapVérifier les clés et les valeursPropriétés de Map : keys & valuesAjout conditionnel : putIfAbsentSupprimer des entrées d'une MapMaps imbriquéesRécapitulatif - Mise à jour de l'inventaire2Opérations fonctionnelles sur les listes
Transformer avec 'map'Filtrer avec 'where'Utiliser '.toList()'Vérifier des conditions avec 'any'Conditions avec 'every'Trouver avec 'firstWhere'Récapitulatif - Filtrage de données3Les Ensembles
Qu'est-ce qu'un ensemble ?Créer un ensembleAjouter et supprimer des éléments d'un ensembleVérifier la présence d'éléments dans un ensembleConvertir une liste en ensembleUnion d'ensemblesIntersection d'ensemblesDifférence d'ensemblesRécapitulatif - Liste d'invités uniques