🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Operazioni Avanzate su Collezioni in Dart: Guida Completa

Codegrind TeamOct 14 2024

In Dart, le collezioni come liste, set e map sono fondamentali per gestire e manipolare dati. Oltre alle operazioni di base, Dart offre una serie di tecniche avanzate per ottimizzare il lavoro con queste strutture dati. In questa guida, esploreremo operazioni avanzate su collezioni, inclusi metodi per ordinare, filtrare, e aggregare i dati, fornendo esempi pratici per ogni operazione.

Operazioni Avanzate su Liste

Ordinare le Liste

Dart offre metodi per ordinare le liste in base a vari criteri. Il metodo sort modifica la lista in place, ordinandola secondo un criterio specificato.

Esempio: Ordinare una lista di numeri

void main() {
  List<int> numeri = [5, 3, 8, 1, 2];
  numeri.sort();  // Ordinamento in ordine crescente
  print(numeri);  // Output: [1, 2, 3, 5, 8]
}

Esempio: Ordinare una lista di oggetti

class Persona {
  String nome;
  int eta;

  Persona(this.nome, this.eta);
}

void main() {
  List<Persona> persone = [
    Persona('Alice', 30),
    Persona('Bob', 25),
    Persona('Charlie', 35)
  ];

  persone.sort((a, b) => a.eta.compareTo(b.eta));
  print(persone.map((p) => '${p.nome}: ${p.eta}').toList());  // Output: [Bob: 25, Alice: 30, Charlie: 35]
}

Filtrare le Liste

Il metodo where crea una nuova lista contenente solo gli elementi che soddisfano una condizione specificata.

Esempio: Filtrare numeri pari

void main() {
  List<int> numeri = [1, 2, 3, 4, 5, 6];
  List<int> pari = numeri.where((n) => n.isEven).toList();
  print(pari);  // Output: [2, 4, 6]
}

Mappare le Liste

Il metodo map crea una nuova lista con i risultati della funzione applicata a ciascun elemento della lista originale.

Esempio: Convertire numeri in stringhe

void main() {
  List<int> numeri = [1, 2, 3];
  List<String> stringhe = numeri.map((n) => 'Numero $n').toList();
  print(stringhe);  // Output: [Numero 1, Numero 2, Numero 3]
}

Operazioni Avanzate su Set

Unire e Intersecare Set

I set in Dart supportano operazioni come l’unione e l’intersezione tramite metodi come union e intersection.

Esempio: Unire due set

void main() {
  Set<int> set1 = {1, 2, 3};
  Set<int> set2 = {3, 4, 5};

  Set<int> unione = set1.union(set2);
  print(unione);  // Output: {1, 2, 3, 4, 5}
}

Esempio: Intersecare due set

void main() {
  Set<int> set1 = {1, 2, 3};
  Set<int> set2 = {2, 3, 4};

  Set<int> intersezione = set1.intersection(set2);
  print(intersezione);  // Output: {2, 3}
}

Rimuovere Elementi da un Set

Il metodo remove permette di eliminare un elemento specifico da un set.

Esempio: Rimuovere un elemento

void main() {
  Set<int> numeri = {1, 2, 3, 4};
  numeri.remove(3);
  print(numeri);  // Output: {1, 2, 4}
}

Operazioni Avanzate su Map

Filtrare le Map

Il metodo where può essere utilizzato anche per filtrare mappe, basandosi sui valori della mappa.

Esempio: Filtrare valori della mappa

void main() {
  Map<String, int> età = {'Alice': 30, 'Bob': 25, 'Charlie': 35};
  Map<String, int> maggiorenni = età.where((nome, età) => età >= 30);
  print(maggiorenni);  // Output: {Alice: 30, Charlie: 35}
}

Mappare le Map

Il metodo map crea una nuova mappa trasformando chiavi e valori secondo una funzione specificata.

Esempio: Convertire i valori

void main() {
  Map<String, int> età = {'Alice': 30, 'Bob': 25};
  Map<String, String> etàInStringa = età.map((nome, eta) => MapEntry(nome, 'Età: $eta'));
  print(etàInStringa);  // Output: {Alice: Età: 30, Bob: Età: 25}
}

Considerazioni sulle Operazioni Avanzate

  • Performance: Alcune operazioni, come ordinare o filtrare grandi collezioni, possono influire sulle performance. È importante considerare la dimensione dei dati e l’efficienza degli algoritmi utilizzati.
  • Immutenza delle Collezioni: Le operazioni che modificano le collezioni esistenti (come sort su liste) possono alterare i dati originali. Usa metodi immutabili se è necessario mantenere la collezione originale intatta.
  • Funzioni di Ordine e Comparazione: Personalizza l’ordinamento e le operazioni su collezioni utilizzando funzioni di comparazione per gestire criteri specifici.

Conclusione

Le operazioni avanzate su collezioni in Dart offrono potenti strumenti per manipolare e gestire i dati. Conoscere e utilizzare metodi come sort, where, e map ti permetterà di scrivere codice più efficiente e flessibile. Esplora le possibilità offerte da liste, set e map per ottimizzare il tuo lavoro con i dati e risolvere problemi complessi.

Per ulteriori approfondimenti su collezioni e generics, consulta anche gli articoli su liste, set, e map.