Über eine Map iterieren
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 26 von 65.
Beim Arbeiten mit Map-Sammlungen müssen Sie oft jedes Schlüssel-Wert-Paar verarbeiten. Die forEach-Methode bietet eine saubere Möglichkeit, alle Einträge in einer Map zu durchlaufen, wobei Sie Zugriff auf sowohl den Schlüssel als auch den zugehörigen Wert erhalten.
Die forEach-Methode nimmt eine Funktion als Argument entgegen. Diese Funktion erhält zwei Parameter: den Schlüssel und den Wert für jeden Eintrag in der Map. Die Methode ruft Ihre Funktion automatisch einmal für jedes Schlüssel-Wert-Paar in der Map auf.
Map<String, int> studentScores = {
'Alice': 85,
'Bob': 92,
'Charlie': 78
};
studentScores.forEach((name, score) {
print('$name scored $score points');
});
// Ausgabe:
// Alice scored 85 points
// Bob scored 92 points
// Charlie scored 78 pointsDieser Ansatz ist viel bequemer, als manuell auf jeden Schlüssel zuzugreifen oder zu versuchen, die Map mit anderen Methoden zu durchlaufen. Die forEach-Methode übernimmt die gesamte Iterationslogik für Sie, wodurch Ihr Code sauberer und lesbarer wird, wenn Sie jeden Eintrag in einer Map verarbeiten müssen.
Aufgabe
EinfachErstellen Sie ein Programm, das das tägliche Verkaufsberichtssystem eines Restaurants verwaltet, indem es Menüpunkte und deren Verkaufsdaten analysiert. Ihr Programm sollte:
- Einen String-Input einlesen, der den Namen des Restaurants darstellt
- Mehrere Paare von Eingaben einlesen, die Menüpunkte und deren Verkaufsbeträge darstellen (die Eingabe endet, wenn Sie
"sales_done"erhalten) - Eine Map erstellen, um jeden Menüpunkt als Schlüssel und seinen Verkaufsbetrag als Wert zu speichern
- Die
forEach-Methode verwenden, um durch die Verkaufsdaten zu iterieren und den Gesamtumsatz zu berechnen - Die
forEach-Methode erneut verwenden, um den meistverkauften Artikel (höchster Verkaufsbetrag) zu identifizieren - Den Verkaufsbericht im unten gezeigten exakten Format ausgeben
Wenn zum Beispiel der Name des Restaurants "Mario's Pizza" ist und die Verkaufsdaten "Margherita Pizza" mit 450, "Caesar Salad" mit 280, "Garlic Bread" mit 320, "Tiramisu" mit 180 enthalten, sollte Ihr Programm Folgendes ausgeben:
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 successfullyWenn der Name des Restaurants "Sushi Express" ist und die Verkaufsdaten "California Roll" mit 380, "Salmon Sashimi" mit 520, "Miso Soup" mit 150 enthalten, sollte Ihr Programm Folgendes ausgeben:
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 successfullyWenn der Name des Restaurants "Burger Palace" ist und die Verkaufsdaten "Classic Burger" mit 600, "French Fries" mit 400, "Milkshake" mit 250, "Onion Rings" mit 180 enthalten, sollte Ihr Programm Folgendes ausgeben:
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 successfullyIhr Programm muss die forEach-Methode verwenden, um durch die Map-Einträge zu iterieren. Verwenden Sie zuerst forEach, um jeden Menüpunkt und seinen Verkaufsbetrag anzuzeigen und gleichzeitig den Gesamtumsatz zu berechnen. Verwenden Sie dann forEach erneut, um den Artikel mit dem höchsten Verkaufsbetrag zu finden. Das Eingabeformat ist: Restaurantname, dann abwechselnd Namen der Menüpunkte und Verkaufsbeträge (als Strings, die in Ganzzahlen umgewandelt werden müssen), endend mit "sales_done".
Spickzettel
Die forEach-Methode ermöglicht es Ihnen, alle Schlüssel-Wert-Paare in einer Map zu durchlaufen. Sie nimmt eine Funktion entgegen, die zwei Parameter erhält: den Schlüssel und den Wert für jeden Eintrag.
Map<String, int> studentScores = {
'Alice': 85,
'Bob': 92,
'Charlie': 78
};
studentScores.forEach((name, score) {
print('$name scored $score points');
});
// Ausgabe:
// Alice scored 85 points
// Bob scored 92 points
// Charlie scored 78 pointsDie forEach-Methode ruft Ihre Funktion automatisch einmal für jedes Schlüssel-Wert-Paar in der Map auf, was die Verarbeitung aller Einträge ohne manuelle Iterationslogik komfortabel macht.
Probier es selbst
import 'dart:io';
void main() {
// Restaurantnamen lesen
String? restaurantName = stdin.readLineSync();
// Eine Map erstellen, um Menüpunkte und deren Verkaufsbeträge zu speichern
Map<String, int> salesData = {};
// Menüpunkte und Verkaufsbeträge lesen bis "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: Schreiben Sie Ihren Code unten
// Verwenden Sie forEach, um den Gesamtumsatz zu berechnen und die Verkaufsdaten anzuzeigen
// Verwenden Sie forEach erneut, um den meistverkauften Artikel zu finden
// Den Verkaufsbericht im erforderlichen Format ausgeben
print("Restaurant: $restaurantName");
print("Daily Sales Report:");
// Jeden Artikel anzeigen und die Summe berechnen
// Den meistverkauften Artikel finden und anzeigen
// Gesamtumsatz und Status anzeigen
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste