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.
Sfida
FacileCrea un programma che gestisca un sistema di pulizia dei dati rimuovendo le voci duplicate dalle risposte a un sondaggio. Il tuo programma deve:
- Leggere una stringa in input che rappresenti il titolo del sondaggio
- Leggere più stringhe in input che rappresentino le risposte al sondaggio (l'input terminerà quando riceverai
"responses_done") - Creare una List per memorizzare tutte le risposte originali (incluse quelle duplicate)
- Usare
Set.from()per convertire la lista in un Set, rimuovendo automaticamente i duplicati - Usare
toList()per riconvertire il Set in una List di risposte univoche - 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 successfullySe 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 successfullySe 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 successfullyIl 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
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online