Menu
Coddy logo textTech

Convertire una lista in un insieme

Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 21 di 65.

Una delle applicazioni più pratiche di Set è rimuovere gli elementi duplicati da una List. Poiché i set eliminano automaticamente i duplicati, puoi convertire facilmente una lista con valori ripetuti in una raccolta di elementi univoci.

Per convertire una List in un Set, ti basta passare la lista al costruttore Set.from(). Questo crea un nuovo set contenente tutti gli elementi unici della lista originale.

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}

Se hai bisogno di ottenere di nuovo il risultato come List (magari per mantenere la compatibilità con altre parti del tuo codice), puoi riconvertire l'insieme in una lista usando toList(). Otterrai una lista contenente solo gli elementi univoci dell'originale.

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

Questo schema List → Set → List è estremamente comune quando devi ripulire i dati rimuovendo i duplicati e mantenendo la struttura della lista per ulteriori elaborazioni.

challenge icon

Sfida

Facile

Crea un programma che gestisca un sistema di pulizia dei dati rimuovendo le voci duplicate dalle risposte a un sondaggio. Il tuo programma deve:

  1. Leggere una stringa in input che rappresenti il titolo del sondaggio
  2. Leggere più stringhe in input che rappresentino le risposte al sondaggio (l'input terminerà quando riceverai "responses_done")
  3. Creare una List per memorizzare tutte le risposte originali (incluse quelle duplicate)
  4. Usare Set.from() per convertire la lista in un Set, rimuovendo automaticamente i duplicati
  5. Usare toList() per riconvertire il Set in una List di risposte univoche
  6. Stampare i risultati della pulizia dei dati nel formato esatto mostrato di seguito

Ad esempio, se il titolo del sondaggio è "Customer Satisfaction Survey" e le risposte sono "Excellent", "Good", "Excellent", "Fair", "Good", "Excellent", "Poor", il tuo programma dovrebbe produrre:

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

Se il titolo del sondaggio è "Product Feedback" e le risposte sono "Like", "Dislike", "Like", "Like", il tuo programma dovrebbe produrre:

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

Se il titolo del sondaggio è "Event Rating" e le risposte sono "Amazing", "Okay", "Great", il tuo programma dovrebbe produrre:

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

Il tuo programma deve mostrare il procedimento completo List → Set → List. Prima memorizza tutte le risposte in una List, poi usa Set.from() per creare un Set dalla List e infine usa toList() per riconvertire il Set in una List. Calcola il numero di duplicati rimossi sottraendo il conteggio finale delle risposte univoche dal conteggio totale originale.

Provalo tu

import 'dart:io';

void main() {
  // Leggi il titolo del sondaggio
  String? surveyTitle = stdin.readLineSync();
  
  // Leggi le risposte al sondaggio fino a "responses_done"
  List<String> originalResponses = [];
  String? response;
  while ((response = stdin.readLineSync()) != "responses_done") {
    if (response != null) {
      originalResponses.add(response);
    }
  }
  
  // TODO: Scrivi il tuo codice qui sotto
  // 1. Usa Set.from() per convertire la lista in un Set (rimuove i duplicati)
  // 2. Usa toList() per riconvertire il Set in una List
  // 3. Calcola il numero di duplicati rimossi e i conteggi finali
  
  // Stampa i risultati nel formato richiesto
  print("Survey: $surveyTitle");
  print("Original responses: $originalResponses");
  // Aggiungi qui le istruzioni print rimanenti
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Dart online