Menu
Coddy logo textTech

Convertir una lista en un Conjunto

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 21 de 65.

Una de las aplicaciones más prácticas de Set es eliminar elementos duplicados de una List. Dado que los conjuntos eliminan automáticamente los duplicados, puedes convertir fácilmente una lista con valores repetidos en una colección de elementos únicos.

Para convertir una List en un Set, simplemente pasas la lista al constructor Set.from(). Esto crea un nuevo conjunto que contiene todos los elementos únicos de la lista original.

List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);

print(uniqueNumbers);  // {1, 2, 3, 4, 5}

Si necesitas el resultado de vuelta como una List (quizás para mantener la compatibilidad con otras partes de tu código), puedes convertir el conjunto de nuevo a una lista usando toList(). Esto te da una lista que contiene solo los elementos únicos de la original.

List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList);  // [1, 2, 3, 4, 5]

Este patrón de List → Set → List es extremadamente común cuando necesitas limpiar datos eliminando duplicados mientras preservas la estructura de la lista para un procesamiento posterior.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de limpieza de datos eliminando entradas duplicadas de las respuestas de una encuesta. Tu programa debe:

  1. Leer una entrada de cadena que represente el título de la encuesta
  2. Leer múltiples entradas de cadena que representen las respuestas de la encuesta (la entrada terminará cuando recibas "responses_done")
  3. Crear una List para almacenar todas las respuestas originales (incluyendo duplicados)
  4. Usar Set.from() para convertir la lista en un Set, eliminando automáticamente los duplicados
  5. Usar toList() para convertir el Set de nuevo en una List de respuestas únicas
  6. Imprimir los resultados de la limpieza de datos en el formato exacto que se muestra a continuación

Por ejemplo, si el título de la encuesta es "Customer Satisfaction Survey" y las respuestas son "Excellent", "Good", "Excellent", "Fair", "Good", "Excellent", "Poor", tu programa debería mostrar:

Survey: Customer Satisfaction Survey
Original responses: [Excellent, Good, Excellent, Fair, Good, Excellent, Poor]
Total responses collected: 7
Converting to Set to remove duplicates...
Unique responses (Set): {Excellent, Good, Fair, Poor}
Converting back to List...
Cleaned responses: [Excellent, Good, Fair, Poor]
Duplicates removed: 3
Final unique responses: 4
Status: Data cleaning completed successfully

Si el título de la encuesta es "Product Feedback" y las respuestas son "Like", "Dislike", "Like", "Like", tu programa debería mostrar:

Survey: Product Feedback
Original responses: [Like, Dislike, Like, Like]
Total responses collected: 4
Converting to Set to remove duplicates...
Unique responses (Set): {Like, Dislike}
Converting back to List...
Cleaned responses: [Like, Dislike]
Duplicates removed: 2
Final unique responses: 2
Status: Data cleaning completed successfully

Si el título de la encuesta es "Event Rating" y las respuestas son "Amazing", "Okay", "Great", tu programa debería mostrar:

Survey: Event Rating
Original responses: [Amazing, Okay, Great]
Total responses collected: 3
Converting to Set to remove duplicates...
Unique responses (Set): {Amazing, Okay, Great}
Converting back to List...
Cleaned responses: [Amazing, Okay, Great]
Duplicates removed: 0
Final unique responses: 3
Status: Data cleaning completed successfully

Tu programa debe demostrar el patrón completo List → Set → List. Primero almacena todas las respuestas en una List, luego usa Set.from() para crear un Set a partir de la List, y finalmente usa toList() para convertir el Set de nuevo a una List. Calcula el número de duplicados eliminados restando el recuento único final del recuento total original.

Hoja de referencia

Para eliminar duplicados de una List, conviértela en un Set usando Set.from():

List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);
print(uniqueNumbers);  // {1, 2, 3, 4, 5}

Para convertir un Set de nuevo a una List, usa toList():

List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList);  // [1, 2, 3, 4, 5]

El patrón List → Set → List se utiliza comúnmente para la limpieza de datos mientras se preserva la estructura de la lista.

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer el título de la encuesta
  String? surveyTitle = stdin.readLineSync();
  
  // Leer las respuestas de la encuesta hasta "responses_done"
  List<String> originalResponses = [];
  String? response;
  while ((response = stdin.readLineSync()) != "responses_done") {
    if (response != null) {
      originalResponses.add(response);
    }
  }
  
  // TODO: Escribe tu código a continuación
  // 1. Usa Set.from() para convertir la lista en un Set (elimina duplicados)
  // 2. Usa toList() para convertir el Set de nuevo en una Lista
  // 3. Calcula los duplicados eliminados y los conteos finales
  
  // Imprimir los resultados en el formato requerido
  print("Survey: $surveyTitle");
  print("Original responses: $originalResponses");
  // Agrega las declaraciones de impresión restantes aquí
}
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 Lógica y Flujo