DMarlon Studio

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.

Dart · Mapas en DMarlon Studio: el código del ejemplo y su salida en la terminal

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: 3

Para recordar

  • Un mapa va entre { } con pares clave: valor.
  • m[clave] = valor cambia o añade.
  • Una clave que falta da null; ?? pone un valor por defecto.
  • for (var e in m.entries) recorre e.key y e.value.
  • containsKey mira 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.