Menu
Coddy logo textTech

Ü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 points

Dieser 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.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das das tägliche Verkaufsberichtssystem eines Restaurants verwaltet, indem es Menüpunkte und deren Verkaufsdaten analysiert. Ihr Programm sollte:

  1. Einen String-Input einlesen, der den Namen des Restaurants darstellt
  2. Mehrere Paare von Eingaben einlesen, die Menüpunkte und deren Verkaufsbeträge darstellen (die Eingabe endet, wenn Sie "sales_done" erhalten)
  3. Eine Map erstellen, um jeden Menüpunkt als Schlüssel und seinen Verkaufsbetrag als Wert zu speichern
  4. Die forEach-Methode verwenden, um durch die Verkaufsdaten zu iterieren und den Gesamtumsatz zu berechnen
  5. Die forEach-Methode erneut verwenden, um den meistverkauften Artikel (höchster Verkaufsbetrag) zu identifizieren
  6. 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 successfully

Wenn 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 successfully

Wenn 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 successfully

Ihr 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 points

Die 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
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf