Los mapas en Dart son una colección de pares clave-valor. Cada clave única se asocia con un valor. Los mapas son útiles cuando necesitas asociar datos de una manera que permita búsquedas rápidas por clave. En este tema, aprenderás cómo trabajar con mapas en Dart, incluyendo su creación, manipulación y uso en diferentes contextos.

Contenido

Introducción a los Mapas

Un mapa es una colección de pares clave-valor, donde cada clave es única. Los mapas son útiles para almacenar datos que necesitan ser recuperados rápidamente mediante una clave.

Map<String, int> exampleMap = {
  'one': 1,
  'two': 2,
  'three': 3,
};

En el ejemplo anterior, exampleMap es un mapa que asocia cadenas (String) con enteros (int).

Creación de Mapas

Puedes crear mapas de varias maneras en Dart:

Usando Literales de Mapa

Map<String, String> countries = {
  'USA': 'Washington, D.C.',
  'France': 'Paris',
  'Japan': 'Tokyo',
};

Usando el Constructor Map()

Map<int, String> numbers = Map();
numbers[1] = 'one';
numbers[2] = 'two';
numbers[3] = 'three';

Usando el Constructor Map.from()

Map<String, int> originalMap = {'a': 1, 'b': 2};
Map<String, int> newMap = Map.from(originalMap);

Acceso a Elementos

Puedes acceder a los valores de un mapa usando sus claves:

Map<String, String> countries = {
  'USA': 'Washington, D.C.',
  'France': 'Paris',
  'Japan': 'Tokyo',
};

String capital = countries['France']; // 'Paris'

Si intentas acceder a una clave que no existe, obtendrás null:

String capital = countries['Germany']; // null

Modificación de Mapas

Puedes agregar, actualizar o eliminar elementos en un mapa:

Agregar o Actualizar Elementos

Map<String, String> countries = {
  'USA': 'Washington, D.C.',
  'France': 'Paris',
};

countries['Japan'] = 'Tokyo'; // Agregar
countries['France'] = 'Marseille'; // Actualizar

Eliminar Elementos

countries.remove('France'); // Eliminar

Iteración sobre Mapas

Puedes iterar sobre los elementos de un mapa usando un bucle for:

Iterar sobre Claves

for (String key in countries.keys) {
  print(key); // 'USA', 'Japan'
}

Iterar sobre Valores

for (String value in countries.values) {
  print(value); // 'Washington, D.C.', 'Tokyo'
}

Iterar sobre Pares Clave-Valor

for (var entry in countries.entries) {
  print('${entry.key}: ${entry.value}');
}

Métodos y Propiedades Útiles

containsKey()

Verifica si una clave existe en el mapa:

bool hasFrance = countries.containsKey('France'); // false

containsValue()

Verifica si un valor existe en el mapa:

bool hasParis = countries.containsValue('Paris'); // false

length

Obtiene el número de pares clave-valor en el mapa:

int size = countries.length; // 2

isEmpty y isNotEmpty

Verifica si el mapa está vacío o no:

bool empty = countries.isEmpty; // false
bool notEmpty = countries.isNotEmpty; // true

Ejercicios Prácticos

Ejercicio 1: Crear y Manipular un Mapa

Crea un mapa que asocie nombres de estudiantes con sus calificaciones. Luego, realiza las siguientes operaciones:

  1. Agrega un nuevo estudiante y su calificación.
  2. Actualiza la calificación de un estudiante existente.
  3. Elimina un estudiante del mapa.
  4. Imprime todos los estudiantes y sus calificaciones.

Solución

void main() {
  Map<String, int> students = {
    'Alice': 85,
    'Bob': 92,
    'Charlie': 78,
  };

  // Agregar un nuevo estudiante
  students['David'] = 88;

  // Actualizar la calificación de un estudiante existente
  students['Alice'] = 90;

  // Eliminar un estudiante del mapa
  students.remove('Charlie');

  // Imprimir todos los estudiantes y sus calificaciones
  for (var entry in students.entries) {
    print('${entry.key}: ${entry.value}');
  }
}

Ejercicio 2: Contar la Frecuencia de Palabras

Escribe una función que tome una lista de palabras y devuelva un mapa que contenga la frecuencia de cada palabra.

Solución

Map<String, int> wordFrequency(List<String> words) {
  Map<String, int> frequency = {};

  for (String word in words) {
    if (frequency.containsKey(word)) {
      frequency[word] = frequency[word]! + 1;
    } else {
      frequency[word] = 1;
    }
  }

  return frequency;
}

void main() {
  List<String> words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple'];
  Map<String, int> frequency = wordFrequency(words);

  print(frequency); // {apple: 3, banana: 2, orange: 1}
}

Conclusión

En esta sección, has aprendido sobre los mapas en Dart, incluyendo cómo crearlos, acceder a sus elementos, modificarlos e iterar sobre ellos. Los mapas son una estructura de datos poderosa y flexible que te permitirá manejar datos de manera eficiente. Asegúrate de practicar con los ejercicios proporcionados para reforzar tu comprensión y prepararte para los temas más avanzados.

© Copyright 2024. Todos los derechos reservados