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 puntosEste 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.
Desafío
FácilCrea 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:
- Leer una entrada de cadena que represente el nombre del restaurante
- Leer múltiples pares de entradas que representen artículos del menú y sus montos de ventas (la entrada terminará cuando recibas
"sales_done") - Crear un Map para almacenar cada artículo del menú como clave y su monto de ventas como valor
- Usar el método
forEachpara iterar a través de los datos de ventas y calcular los ingresos totales - Usar el método
forEachnuevamente para identificar el artículo más vendido (el mayor monto de ventas) - 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 successfullySi 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 successfullySi 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 successfullyTu 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 pointsEl 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
}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
1Manipulación avanzada de listas
Propiedades de listas: first y lastEstado de la lista: isEmpty y isNotEmptyInvertir una listaAñadir a una lista: insertEliminación en listas: removeWhereBúsqueda en una lista: indexOfOrdenar una listaMezclar una listaResumen - Organizador de listas4Manipulación avanzada de mapas
Iterar sobre un mapaComprobación de claves y valoresPropiedades del mapa: keys y valuesAdición condicional: putIfAbsentEliminar entradas de un mapaMapas anidadosResumen - Actualización de inventario2Operaciones funcionales con listas
Transformar con 'map'Filtrar con 'where'Uso de '.toList()'Comprobar condiciones con 'any'Condiciones con 'every'Búsqueda con 'firstWhere'Resumen - Filtrado de datos5Proyecto: Calculadora de carrito de compras
Configuración del proyectoAgregar artículos al carrito3Conjuntos
¿Qué es un Conjunto?Crear un ConjuntoAñadir y eliminar elementos de un ConjuntoComprobar elementos en un ConjuntoConvertir una lista en un ConjuntoUnión de ConjuntosIntersección de ConjuntosDiferencia de ConjuntosResumen - Lista de invitados única