Skip to main content

valerioditommaso.dev

I set
Panoramica

I set

18 febbraio 2026
3 min di lettura

Come le Liste, i Set sono delle collezioni di dati, solo che a differenza delle Liste, i valori dei Set sono unici e non ordinati, quindi ad esempio a differenza di una lista non è possibile avere stessi valori duplicati, a prescindere se siano in indice differente:

Esempio:

void main(List<String> arguments) {
List<int> lista = [1, 1, 2, 2, 3, 3];
Set<int> set = {1, 1, 2, 2, 3, 3};
print(lista);
print(set);
}
[1, 1, 2, 2, 3, 3]
{1, 2, 3}

I valori dei Set non sono accessibili attraverso l’indice

È possibile usare gli indici nei Set?

La risposta è si, tuttavia come scritto in precedenza, i valori dei Set sono anche non ordinati.
Questo significa che nonostante gli elementi di un Set siano accessibili attraverso un indice, non si ha la garanzia che quest’ultimi mantengano lo stesso indice nel tempo.


I modi per creare un Set

Esempio:

void main(List<String> arguments) {
Set<int> set; // 1
Set<int> set = {1, 2, 3}; // 2
var set = Set(); // 3
var set = {1, 2, 3}; // 4 (Se i valori non vengono inizializzati diventa una Map)
var set = <int>{}; // 5
}

Aggiungere elementi ad un Set

Con .add()

Esempio:

void main(List<String> arguments) {
var prova = <int>{};
prova.add(7);
prova.add(3);
prova.add(1);
prova.add(9);
print(prova);
}
{7, 3, 1, 9}

Con .addAll()

Esempio:

void main(List<String> arguments) {
var prova = <int>{};
prova.addAll({7, 3, 1, 9});
print(prova);
}
{7, 3, 1, 9}

Con lo spread operator ...

Esempio:

void main(List<String> arguments) {
var palle = {11, 17};
var prova = <int>{...palle};
prova.addAll({7, 3, 1, 9});
print(prova);
}

L’output è:

{11, 17, 7, 3, 1, 9}

Infine si possono aggiungere elementi anche con la concatenazione .. (Cascade operator) esattamente come abbiamo visto per le liste.


Collection if e Collection for

Collection if

Permette di inserire un elemento ad un Set sulla base di una condizione.

Esempio:

void main(List<String> arguments) {
bool maschio = false;
Set<String> nomi = {
"Federico",
"Carlo",
if(maschio) "Valerio" else "Anastasia",
"Claudio"
};
print(nomi);
}
{Federico, Carlo, Anastasia, Claudio}

Collection for

Permette di inserire uno o più elementi ad un Set attraverso l’uso di un ciclo for.

Esempio:

void main(List<String> arguments) {
Set<int> numeri = {1, 2, 3, 4, 5, 6, 7, 8, 9};
Set<String> nomi = {
"Numero 0",
for(int i in numeri) "Numero $i",
"Numero 10"
};
print(nomi);
}
{Numero 0, Numero 1, Numero 2, Numero 3, Numero 4, Numero 5, Numero 6, Numero 7, Numero 8, Numero 9, Numero 10}

Rimuovere elementi da un Set

Oltre a funzioni come remove(), removeAt() e clear() che ho illustrato nella sezione sulle Liste e che funzionano anche per i Set, ci sono anche removeAll() e removeWhere():

Rimuovere più di un elemento con removeAll():

Permette di rimuovere più di un singolo elemento insieme:

Esempio:

void main(List<String> arguments) {
Set<int> numeri = {1, 2, 3, 4, 5, 6, 7, 8, 9};
removeAll({7, 8, 9});
print(numeri);
}
{1, 2, 3, 4, 5, 6}

Rimozione in base ad una condizione con removeWhere():

///


Intersezione tra due Set

La funzione .intersection() restituisce gli elementi in comune tra due Set.

void main(List<String> arguments) {
Set<int> set1 = {1, 2, 3};
Set<int> set2 = {3, 4, 5};
print(set1.intersection(set2));
}
{3}

Unione tra due Set

La funzione .union() restituisce l’unione di due Set.

void main(List<String> arguments) {
Set<int> set1 = {1, 2, 3};
Set<int> set2 = {3, 4, 5};
print(set1.union(set2));
}
{1, 2, 3, 4, 5}

Differenza tra due Set

La funzione .difference() restituisce la differenza del primo Set rispetto al secondo.

void main(List<String> arguments) {
Set<int> set1 = {1, 2, 3};
Set<int> set2 = {3, 4, 5};
print(set1.difference(set2));
}
{1, 2}