Menu
Coddy logo textTech

Iterar sobre un mapa

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 26 de 65.

Al trabajar con colecciones Map, a menudo necesitas procesar cada par clave-valor. El método forEach proporciona una forma limpia de iterar a través de todas las entradas en un mapa, dándote acceso tanto a la clave como a su valor correspondiente.

El método forEach toma una función como argumento. Esta función recibe dos parámetros: la clave y el valor de cada entrada en el mapa. El método llama automáticamente a tu función una vez por cada par clave-valor en el mapa.

Map<String, int> studentScores = {
  'Alice': 85,
  'Bob': 92,
  'Charlie': 78
};

studentScores.forEach((name, score) {
  print('$name scored $score points');
});
// Salida:
// Alice obtuvo 85 puntos
// Bob obtuvo 92 puntos
// Charlie obtuvo 78 puntos

Este enfoque es mucho más conveniente que acceder manualmente a cada clave o intentar recorrer el mapa utilizando otros métodos. El método forEach maneja toda la lógica de iteración por ti, haciendo que tu código sea más limpio y legible cuando necesitas procesar cada entrada en un mapa.

challenge icon

Desafío

Fácil

Crea un programa que gestione el sistema de informes de ventas diarias de un restaurante analizando los artículos del menú y sus datos de ventas. Tu programa debe:

  1. Leer una entrada de cadena que represente el nombre del restaurante
  2. Leer múltiples pares de entradas que representen artículos del menú y sus montos de ventas (la entrada terminará cuando recibas "sales_done")
  3. Crear un Map para almacenar cada artículo del menú como clave y su monto de ventas como valor
  4. Usar el método forEach para iterar a través de los datos de ventas y calcular los ingresos totales
  5. Usar el método forEach nuevamente para identificar el artículo más vendido (el mayor monto de ventas)
  6. Imprimir el informe de ventas en el formato exacto que se muestra a continuación

Por ejemplo, si el nombre del restaurante es "Mario's Pizza" y los datos de ventas incluyen "Margherita Pizza" con 450, "Caesar Salad" con 280, "Garlic Bread" con 320, "Tiramisu" con 180, tu programa debería mostrar:

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 el nombre del restaurante es "Sushi Express" y los datos de ventas incluyen "California Roll" con 380, "Salmon Sashimi" con 520, "Miso Soup" con 150, tu programa debería mostrar:

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 el nombre del restaurante es "Burger Palace" y los datos de ventas incluyen "Classic Burger" con 600, "French Fries" con 400, "Milkshake" con 250, "Onion Rings" con 180, tu programa debería mostrar:

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

Tu programa debe usar el método forEach para iterar a través de las entradas del Map. Primero, usa forEach para mostrar cada artículo del menú y su monto de ventas, mientras calculas también los ingresos totales. Luego, usa forEach nuevamente para encontrar el artículo con el mayor monto de ventas. El formato de entrada será: nombre del restaurante, luego nombres de artículos del menú y montos de ventas alternados (como cadenas que deben convertirse a enteros), terminando con "sales_done".

Hoja de referencia

El método forEach permite iterar a través de todos los pares clave-valor en un Map. Toma una función que recibe dos parámetros: la clave y el valor de cada entrada.

Map<String, int> studentScores = {
  'Alice': 85,
  'Bob': 92,
  'Charlie': 78
};

studentScores.forEach((name, score) {
  print('$name scored $score points');
});
// Salida:
// Alice scored 85 points
// Bob scored 92 points
// Charlie scored 78 points

El método forEach llama automáticamente a tu función una vez por cada par clave-valor en el mapa, lo que lo hace conveniente para procesar todas las entradas sin lógica de iteración manual.

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer el nombre del restaurante
  String? restaurantName = stdin.readLineSync();
  
  // Crear un Map para almacenar los artículos del menú y sus montos de ventas
  Map<String, int> salesData = {};
  
  // Leer artículos del menú y montos de ventas hasta "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: Escribe tu código a continuación
  // Usa forEach para calcular los ingresos totales y mostrar los datos de ventas
  // Usa forEach nuevamente para encontrar el artículo más vendido
  
  // Imprimir el informe de ventas en el formato requerido
  print("Restaurant: $restaurantName");
  print("Daily Sales Report:");
  // Mostrar cada artículo y calcular el total
  // Encontrar y mostrar el artículo más vendido
  // Mostrar los ingresos totales y el estado
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo