Menu
Coddy logo textTech

Panoramica di List, Set e Map

Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 63 di 110.

Dart offre tre tipi di raccolte fondamentali che userai costantemente nello sviluppo di applicazioni. Ognuna ha uno scopo diverso per organizzare e accedere ai dati.

Una lista è una raccolta ordinata in cui gli elementi sono accessibili tramite indice. Gli elementi mantengono l'ordine di inserimento e i duplicati sono consentiti:

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

Un insieme è una raccolta non ordinata di elementi univoci. Se provi ad aggiungere un duplicato, viene semplicemente ignorato:

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

Una Map memorizza coppie chiave-valore, consentendoti di cercare i valori tramite la chiave associata:

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

Ecco un rapido confronto:

CollezioneOrdinataDuplicatiAccesso tramite
ListaSìConsentitiIndice
InsiemeNoNon consentitiVerifica di presenza
MappaNo*Chiavi univocheChiave

Queste collezioni diventano ancora più potenti se combinate con i generics, che esplorerai nelle prossime lezioni per creare collezioni sicure rispetto ai tipi che funzionano con le tue classi personalizzate.

challenge icon

Sfida

Facile

Creiamo un sistema di gestione della classe che utilizza tutti e tre i tipi di raccolta per organizzare i dati degli studenti in modi diversi. Vedrai come List, Set e Map svolgono ciascuno funzioni distinte quando si gestiscono le stesse informazioni.

Organizzerai il codice in due file:

  • classroom.dart: crea una classe Classroom che gestisce i dati degli studenti utilizzando tutti e tre i tipi di raccolta:
    • Una List<String> chiamata attendanceOrder per tenere traccia degli studenti nell'ordine in cui sono arrivati (sono consentiti duplicati se uno studente effettua l'accesso più volte)
    • Un Set<String> chiamato uniqueStudents per tenere traccia degli studenti presenti (senza duplicati)
    • Una Map<String, int> chiamata scores per memorizzare il punteggio di ogni studente nel test
    La tua classe Classroom dovrebbe avere questi metodi:
    • recordArrival(String name) - aggiunge il nome sia all'elenco delle presenze sia all'insieme degli studenti unici
    • setScore(String name, int score) - memorizza il punteggio dello studente nella mappa
    • printReport() - stampa il resoconto della classe (il formato è mostrato qui sotto)
  • main.dart: importa il file della classe e mostra come funziona il sistema:
    • Crea un'istanza di Classroom
    • Registra gli arrivi in questo ordine: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
    • Imposta i punteggi: Alice = 95, Bob = 87, Carol = 92
    • Chiama printReport()

Il metodo printReport() dovrebbe produrre:

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

Nota come la List conserva ogni arrivo (inclusi i duplicati), il Set mantiene automaticamente solo i nomi unici e la Map associa ogni studente al suo punteggio. Ogni tipo di raccolta svolge perfettamente la propria funzione!

Output previsto:

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

Provalo tu

import 'classroom.dart';

void main() {
  // TODO: Crea un'istanza di Classroom
  
  // TODO: Registra gli arrivi in quest'ordine: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
  
  // TODO: Imposta i punteggi: Alice = 95, Bob = 87, Carol = 92
  
  // TODO: Chiama printReport() per visualizzare i dati della classe
}
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 Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Dart online