Capitolo 6: Collections in Dart
Le collections in Dart sono strutture dati fondamentali che permettono di gestire e manipolare insiemi di valori in modo efficiente.
In questo capitolo esploreremo le principali collezioni offerte da Dart: liste, set e mappe.
Approfondiremo anche concetti come il tipo delle collezioni, metodi utili, iterazioni e tecniche avanzate per gestire le collezioni in modo ottimale.
Liste
Le liste in Dart sono strutture ordinate che possono contenere elementi di qualsiasi tipo. Possono essere modificate dinamicamente e offrono una vasta gamma di metodi per la gestione degli elementi.
Dichiarazione di una lista
List<int> numeri = [1, 2, 3, 4, 5];
var nomi = ['Alice', 'Bob', 'Charlie'];
Esercizio \\ Somma degli elementi di una lista
Scrivi un programma che calcola la somma degli elementi in una lista di numeri.
void main() {
List<int> numeri = [10, 20, 30, 40];
int somma = numeri.reduce((a, b) => a + b);
print('La somma degli elementi è: \$somma');
}
Metodi delle liste
Dart fornisce diversi metodi per manipolare le liste.
var numeri = [1, 2, 3];
numeri.add(4); // Aggiunge un elemento
numeri.removeAt(1); // Rimuove l'elemento in posizione 1
numeri.sort(); // Ordina la lista
Annotazioni di tipo con liste
Specificare il tipo aiuta a prevenire errori:
List<String> frutta = ['Mela', 'Banana', 'Pera'];
Uso di var, final e const con le liste
var listaVar = [1, 2, 3]; // Può essere modificata
final listaFinal = [1, 2, 3]; // Non può essere riassegnata
const listaConst = [1, 2, 3]; // Immutevole
Set
I set sono collezioni non ordinate con elementi unici.
Set<int> numeri = {1, 2, 3, 3}; // Contiene solo {1, 2, 3}
Esercizio \\ Uso dei Set
Crea un set di numeri casuali e rimuovi i duplicati.
void main() {
Set<int> numeri = {1, 2, 3, 3, 4, 5, 5};
print(numeri); // Mostra solo numeri unici
}
Map
Le mappe memorizzano coppie chiave-valore.
Map<String, int> eta = {'Alice': 25, 'Bob': 30};
print(eta['Alice']);
Iterazione sulle mappe
eta.forEach((chiave, valore) {
print('\$chiave ha \$valore anni');
});
Esercizio \\ Ordine della Pizza
Crea un programma che gestisce gli ordini delle pizze.
void main() {
Map<String, int> ordine = {'Margherita': 2, 'Diavola': 1};
ordine.forEach((pizza, quantita) {
print('Ordine: \$quantita x \$pizza');
});
}
Collezioni nidificate
Le collezioni possono essere annidate.
List<List<int>> matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
print(matrice[1][2]); // Stampa 6
Esercizio // Valutazioni di un ristorante
Crea una mappa per gestire le valutazioni di un ristorante.
void main() {
Map<String, List<int>> valutazioni = {
'Pizzeria Roma': [5, 4, 5],
'Trattoria Milano': [3, 4, 2]
};
print(valutazioni);
}
Collection-if e Collection-for
Queste funzioni migliorano la gestione delle collezioni in modo conciso.
var numeri = [1, 2, 3];
var raddoppiati = [for (var num in numeri) num * 2];
print(raddoppiati); // [2, 4, 6]
Spread Operator
var numeri = [1, 2, 3];
var altriNumeri = [...numeri, 4, 5];
Esercizio \\ Lista della spesa
Crea una lista che combina più liste di articoli.
void main() {
var frutta = ['Mela', 'Banana'];
var verdura = ['Carota', 'Zucchina'];
var listaSpesa = [...frutta, ...verdura];
print(listaSpesa);
}
Copia delle Collezioni
Le liste possono essere copiate in modo sicuro.
var originale = [1, 2, 3];
var copia = List.from(originale);
copia.add(4);
print(originale); // [1, 2, 3]
print(copia); // [1, 2, 3, 4]
📚 Esercizi
🔹 Esercizio 1: Media dei numeri
Scrivi una funzione che calcoli la media di una lista di numeri interi.
double media(List<int> numeri) {
// Implementa la funzione
}
🔹 Esercizio 2: Parole lunghe
Scrivi una funzione che accetti una lista di parole e restituisca solo quelle con più di 5 lettere.
List<String> paroleLunghe(List<String> parole) {
// Implementa la funzione
}
🔹 Esercizio 3: Filtrare un elenco
Scrivi una funzione che prenda una lista di numeri e restituisca solo quelli pari.
List<int> numeriPari(List<int> numeri) {
// Implementa la funzione
}
🔹 Esercizio 4: Sconto su una lista di prezzi
Scrivi una funzione che applichi uno sconto del 20% su una lista di prezzi.
List<double> applicaSconto(List<double> prezzi) {
// Implementa la funzione
}
🔹 Esercizio 5: Dizionario di parole
Scrivi una funzione che accetti una lista di parole e restituisca una mappa dove le chiavi sono le parole e i valori la loro lunghezza.
Map<String, int> lunghezzaParole(List<String> parole) {
// Implementa la funzione
}
Conclusione
Le collections sono strumenti essenziali in Dart e Flutter.
Comprendere il loro utilizzo e sfruttare le funzionalità avanzate permette di scrivere codice più efficiente e manutenibile.
La pratica costante con esercizi e progetti reali aiuterà a consolidare le conoscenze apprese.