Set în Dart

Set: mulțimi Dart 2.0

Colecție fără elemente duplicate: fiecare valoare apare o singură dată, iar căutarea este rapidă.

Sintaxă
abstract interface class Set<E> implements Iterable<E>

Set<E>()

Ce face Set

Un Set<E> ține valori unice: dacă adaugi a doua oară aceeași valoare, mulțimea rămâne neschimbată. Creezi un set cu acolade și elemente: {'Iași', 'Cluj'}. Atenție: {} singur este un map gol; pentru un set gol scrie <String>{}.

Set-ul creat cu acolade sau cu Set() este un LinkedHashSet: păstrează ordinea în care au fost adăugate elementele. contains pe un set este mult mai rapid decât pe o listă mare.

Pentru că Set este un Iterable, are toate metodele obișnuite: map, where, length, join, toList.

Ce returnează

Set() returnează un set gol care păstrează ordinea inserării.

Exemple

Exemplul 1: Eliminarea duplicatelor

void main() {
  final vizitate = ['Iași', 'Cluj', 'Iași', 'Sibiu', 'Cluj', 'Iași'];
  final unice = vizitate.toSet();
  print(unice);
  print('Orașe diferite: ${unice.length}');

  final etichete = {'dart', 'flutter'};
  print(etichete.add('dart'));
  print(etichete);
}

Rezultat

{Iași, Cluj, Sibiu}
Orașe diferite: 3
false
{dart, flutter}

Exemplul 2: Set gol și verificare rapidă

Pentru un set gol trebuie scris tipul: <String>{}. Fără tip, {} este un map, cum arată runtimeType pe ultimul rând.

void main() {
  final prezenti = <String>{};
  prezenti.add('Ana');
  prezenti.add('Mihai');
  prezenti.add('Ana');

  for (final elev in ['Ana', 'Ioana']) {
    print('$elev prezent: ${prezenti.contains(elev)}');
  }
  print(prezenti);
  final gol = {};
  print('{} are tipul ${gol.runtimeType}');
}

Rezultat

Ana prezent: true
Ioana prezent: false
{Ana, Mihai}
{} are tipul _Map<dynamic, dynamic>

Greșeli frecvente

  • Scrii final s = {}; pentru un set gol și primești un Map. Scrie <int>{} sau Set<int>().
  • Încerci s[0]. Un set nu are poziții; folosește first, elementAt sau transformă-l în listă.

Comenzi înrudite

  • Set.add: add pune un element în set și spune dacă a fost nou; addAll adaugă toate elementele unei colecții.
  • Set.contains: contains verifică rapid dacă un element este în set; containsAll verifică dacă sunt toate elementele unei colecții.
  • Set.union: Operațiile cu mulțimi: reuniunea, intersecția și diferența a două seturi, fiecare ca set nou.
  • LinkedHashSet: Set care păstrează ordinea inserării; este tipul implicit al seturilor scrise cu acolade.
  • HashSet: Set bazat pe tabel hash, fără ordine garantată a elementelor; potrivit doar pentru verificări de apartenență.
  • SplayTreeSet: Set care ține elementele mereu sortate și fără duplicate.