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); // 3Un 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']); // 30Ecco un rapido confronto:
| Collezione | Ordinata | Duplicati | Accesso tramite |
|---|---|---|---|
| Lista | Sì | Consentiti | Indice |
| Insieme | No | Non consentiti | Verifica di presenza |
| Mappa | No* | Chiavi univoche | Chiave |
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.
Sfida
FacileCreiamo 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 classeClassroomche gestisce i dati degli studenti utilizzando tutti e tre i tipi di raccolta:- Una
List<String>chiamataattendanceOrderper tenere traccia degli studenti nell'ordine in cui sono arrivati (sono consentiti duplicati se uno studente effettua l'accesso più volte) - Un
Set<String>chiamatouniqueStudentsper tenere traccia degli studenti presenti (senza duplicati) - Una
Map<String, int>chiamatascoresper memorizzare il punteggio di ogni studente nel test
recordArrival(String name)- aggiunge il nome sia all'elenco delle presenze sia all'insieme degli studenti unicisetScore(String name, int score)- memorizza il punteggio dello studente nella mappaprintReport()- stampa il resoconto della classe (il formato è mostrato qui sotto)
- Una
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()
- Crea un'istanza di
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
}
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
1Fondamenti della programmazione orientata agli oggetti
File esterniLibrerie e importazioniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave thisMetodiVariabili di istanzaFondamenti dei costruttoriRiepilogo - Calcolatrice semplice4Sicurezza dei valori null
Introduzione alla sicurezza dei valori nullNullable e non nullableGli operatori ? e !La keyword late e la sicurezza dei valori nullOperatori null-awareSicurezza dei valori null nelle classiRiepilogo - Sistema di profili utente7Classi astratte e interfacce
Classi astratteMetodi astrattiInterfacce in DartInterfacce impliciteImplementare vs estendereInterfacce multipleRiepilogo - Calcolatore di forme10Collezioni e generici
Panoramica di List, Set e MapCollezioni sicure rispetto ai tipiClassi genericheMetodi genericiVincoli sui genericiIterable e IteratorRiepilogo - Archiviazione generica13Concetti avanzati di OOP
Composizione vs ereditarietàMetodi di estensioneClassi chiamabiliClassi sealed (Dart 3)Record (Dart 3)Pattern e matching (3.0)Enum con metodi16Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente2I costruttori in Dart
Costruttore predefinitoCostruttori con nomeListe di inizializzazioneCostruttori costantiCostruttori factoryCostruttori di reindirizzamentoRiepilogo - Crea forme5Incapsulamento
Membri pubblici e privatiConvenzione del prefisso _Visibilità a livello di libreriaApprofondimento su getter e setterNascondimento delle informazioniRiepilogo - Registri degli studenti8Mixin
Introduzione ai MixinCreare MixinUsare più MixinParola chiave on nei MixinMixin vs ereditarietàMixin vs interfacciaRiepilogo - Sistema animale11Metodi speciali
Sovrascrittura di toString()Sovrascrittura di hashCode e ==Interfaccia ComparableMetodo call()Sovrascrittura di noSuchMethodRiepilogo - Collezione personalizzata14Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneSingletonFactoryObserverStrategy3Proprietà delle classi
Membri di istanza e staticiCampi final e constVariabili lateMetodi e campi staticiGetter e setterRiepilogo - Gestore di conti bancari6Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiL’annotazione @overrideLa parola chiave final per le classiCostruttori ed ereditarietàRiepilogo - Gerarchia dei dipendenti9Polimorfismo
Fondamenti di polimorfismoPolimorfismo tramite interfacceControllo del tipo a runtimeGli operatori is e asParola chiave covariantRiepilogo - Elaboratore di pagamenti12OOP asincrona
Future e async/awaitNozioni di base sugli streamController degli streamCostruttori asincroniAsync nei metodi di classeRiepilogo - Recupero dei dati15Pattern di progettazione Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern RepositoryEsercitati da solo: Compilatore Dart online