Ü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
EinfachErstelle ein Programm, das das tägliche Verkaufsberichtssystem eines Restaurants verwaltet, indem es Speisekartenartikel und deren Verkaufsdaten analysiert. Dein Programm sollte:
- Eine Zeichenfolgeneingabe lesen, die den Namen des Restaurants darstellt
- Mehrere Eingabepaare lesen, die Speisekartenartikel und deren Verkaufsbeträge darstellen (die Eingabe endet, wenn du
"sales_done"erhältst) - Eine Map erstellen, in der jeder Speisekartenartikel als Schlüssel und sein Verkaufsbetrag als Wert gespeichert wird
- Die
forEach-Methode verwenden, um die Verkaufsdaten zu durchlaufen und den Gesamtumsatz zu berechnen - Die
forEach-Methode erneut verwenden, um den meistverkauften Artikel zu ermitteln (höchster Verkaufsbetrag) - Den Verkaufsbericht im unten gezeigten exakten Format ausgeben
Wenn der Name des Restaurants beispielsweise "Mario's Pizza" lautet und die Verkaufsdaten "Margherita Pizza" mit 450, "Caesar Salad" mit 280, "Garlic Bread" mit 320 und "Tiramisu" mit 180 enthalten, sollte dein 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" lautet und die Verkaufsdaten "California Roll" mit 380, "Salmon Sashimi" mit 520 und "Miso Soup" mit 150 enthalten, sollte dein 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" lautet und die Verkaufsdaten "Classic Burger" mit 600, "French Fries" mit 400, "Milkshake" mit 250 und "Onion Rings" mit 180 enthalten, sollte dein 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 successfullyDein Programm muss die forEach-Methode verwenden, um die Einträge der Map zu durchlaufen. Verwende zunächst forEach, um jeden Speisekartenartikel und seinen Verkaufsbetrag anzuzeigen und gleichzeitig den Gesamtumsatz zu berechnen. Verwende anschließend erneut forEach, um den Artikel mit dem höchsten Verkaufsbetrag zu finden. Das Eingabeformat lautet: Name des Restaurants, danach abwechselnd Namen der Speisekartenartikel und Verkaufsbeträge (als Zeichenfolgen, die in Ganzzahlen umgewandelt werden müssen), abschließend "sales_done".
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Übe selbstständig: Online-Dart-Compiler