Menu
Coddy logo textTech

Visión general de List, Set y Map

Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 63 de 110.

Dart proporciona tres tipos de colecciones principales que usarás constantemente al crear aplicaciones. Cada una tiene un propósito diferente para organizar y acceder a los datos.

Una Lista es una colección ordenada donde se accede a los elementos por índice. Los elementos mantienen su orden de inserción y se permiten duplicados:

var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]);      // apple
print(fruits.length);  // 3

Un Set es una colección desordenada de elementos únicos. Si intentas añadir un duplicado, simplemente se ignora:

var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers);  // {1, 2, 3}

Un Map almacena pares clave-valor, permitiéndote buscar valores por su clave asociada:

var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']);  // 30

Aquí tienes una comparación rápida:

ColecciónOrdenadaDuplicadosAcceso por
ListPermitidosÍndice
SetNoNo permitidosComprobación de existencia
MapNo*Claves únicasClave

Estas colecciones se vuelven aún más potentes cuando se combinan con genéricos, que explorarás en las próximas lecciones para crear colecciones de tipo seguro que funcionen con tus clases personalizadas.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de gestión de aula que utiliza los tres tipos de colecciones para organizar los datos de los estudiantes de diferentes maneras. Verás cómo las Listas, los Conjuntos y los Mapas cumplen propósitos distintos al gestionar la misma información.

Organizarás tu código en dos archivos:

  • classroom.dart: Crea una clase Classroom que gestione los datos de los estudiantes utilizando los tres tipos de colecciones:
    • Una List<String> llamada attendanceOrder para rastrear a los estudiantes en el orden en que llegaron (se permiten duplicados si un estudiante se registra varias veces)
    • Un Set<String> llamado uniqueStudents para rastrear qué estudiantes están presentes (sin duplicados)
    • Un Map<String, int> llamado scores para almacenar la calificación del examen de cada estudiante
    Tu Classroom debe tener estos métodos:
    • recordArrival(String name) - añade el nombre tanto a la lista de asistencia como al conjunto de estudiantes únicos
    • setScore(String name, int score) - almacena la calificación del estudiante en el mapa
    • printReport() - imprime el informe del aula (formato mostrado a continuación)
  • main.dart: Importa tu archivo de aula y demuestra el sistema:
    • Crea una instancia de Classroom
    • Registra las llegadas en este orden: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
    • Establece las calificaciones: Alice = 95, Bob = 87, Carol = 92
    • Llama a printReport()

El método printReport() debe mostrar:

Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}

Observa cómo la Lista preserva cada llegada (incluyendo duplicados), el Conjunto mantiene automáticamente solo nombres únicos y el Mapa asocia a cada estudiante con su calificación. ¡Cada tipo de colección cumple su propósito perfectamente!

Salida esperada:

Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}

Hoja de referencia

Dart proporciona tres tipos de colecciones principales para organizar datos:

List - Una colección ordenada donde se accede a los elementos por índice. Se permiten duplicados:

var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]);      // apple
print(fruits.length);  // 3

Set - Una colección no ordenada de elementos únicos. Los duplicados se ignoran automáticamente:

var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers);  // {1, 2, 3}

Map - Almacena pares clave-valor para la búsqueda por clave:

var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']);  // 30
ColecciónOrdenadaDuplicadosAcceso por
ListPermitidosÍndice
SetNoNo permitidosComprobación de existencia
MapNo*Claves únicasClave

Pruébalo tú mismo

import 'classroom.dart';

void main() {
  // TODO: Crear una instancia de Classroom
  
  // TODO: Registrar las llegadas en este orden: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
  
  // TODO: Establecer las puntuaciones: Alice = 95, Bob = 87, Carol = 92
  
  // TODO: Llamar a printReport() para mostrar los datos del aula
}
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 Programación Orientada a Objetos