Lección 12 · 12 de 20
Mapas · Dart
Guarde pares clave-valor en un Map de Dart: la carta de una cafetería con [], ??, remove, containsKey, entries y un recuento de pedidos.

Un mapa (Map) relaciona claves con valores, entre llaves: {'coffee': 1.40, 'tea': 1.20}. Map<String, double> dice que las claves son cadenas y los valores, números con decimales. Se busca por la clave: menu['coffee'] da 1.4 (Dart no escribe el cero final de un double).
La misma forma sirve para cambiar un valor y para añadir una clave nueva: menu['tea'] = 1.30 actualiza el té y menu['juice'] = 2.50 añade el zumo al final.
Si la clave no existe, menu['cake'] da `null`, no un error. Con `??` se pone un valor por defecto en su lugar: menu['cake'] ?? 0.0. `remove()` borra una clave con su valor, `containsKey()` pregunta si existe y `keys` y `values` dan las claves y los valores.
`entries` da cada pareja como un objeto con key y value, y el for-in las recorre. padRight(8) rellena el nombre con espacios hasta 8 caracteres para que los precios salgan en columna.
Un uso muy habitual es contar: por cada bebida pedida, counts[drink] = (counts[drink] ?? 0) + 1 suma uno a lo que había, o empieza en cero si es la primera vez. <String, int>{} es un mapa vacío con sus tipos.
Código · main.dart
void main() { // A map links keys to values: {key: value}. Map<String, double> menu = {'coffee': 1.40, 'tea': 1.20, 'toast': 2.10}; print('A coffee costs ${menu['coffee']} euros'); // map[key] = value changes a value or adds a new key. menu['tea'] = 1.30; menu['juice'] = 2.50; print(menu); // A missing key gives null; ?? puts a default in its place. print('Cake: ${menu['cake']}, or rather ${menu['cake'] ?? 0.0}'); // remove deletes a key with its value. menu.remove('toast'); print('Toast? ${menu.containsKey('toast')}. Keys: ${menu.keys.toList()}'); // entries gives each key together with its value. for (var item in menu.entries) { print('${item.key.padRight(8)}${item.value.toStringAsFixed(2)}'); } // Counting with a map: one key per drink. var orders = ['coffee', 'tea', 'coffee', 'juice', 'coffee', 'tea']; var counts = <String, int>{}; for (var drink in orders) { counts[drink] = (counts[drink] ?? 0) + 1; } print('Orders: $counts'); print('Different drinks: ${counts.length}');}Salida · dart run main.dart
A coffee costs 1.4 euros
{coffee: 1.4, tea: 1.3, toast: 2.1, juice: 2.5}
Cake: null, or rather 0.0
Toast? false. Keys: [coffee, tea, juice]
coffee 1.40
tea 1.30
juice 2.50
Orders: {coffee: 3, tea: 2, juice: 1}
Different drinks: 3Para recordar
- Un mapa va entre
{ }con paresclave: valor. m[clave] = valorcambia o añade.- Una clave que falta da
null;??pone un valor por defecto. for (var e in m.entries)recorree.keyye.value.containsKeymira si la clave existe.
Ejercicio
Añada un mapa con las unidades vendidas de cada bebida y escriba cuánto ha facturado cada una (unidades por precio) y el total del día.