Map.keys în Dart

keys, values și entries dau cheile, valorile sau perechile unui map, ca Iterable, în ordinea din map.

Sintaxă
Iterable<K> get keys
Iterable<V> get values
Iterable<MapEntry<K, V>> get entries

Ce face Map.keys

keys returnează toate cheile, values toate valorile, iar entries toate perechile, ca obiecte MapEntry cu câmpurile key și value. Toate trei sunt Iterable, deci au map, where, join, fold și celelalte metode.

Rezultatele sunt „vederi” asupra map-ului, nu copii: dacă map-ul se schimbă, și ele se schimbă. print le afișează între paranteze rotunde. Dacă vrei să modifici map-ul în timp ce parcurgi cheile, fă întâi o copie cu toList().

Ce returnează

Un Iterable cu cheile, valorile sau perechile MapEntry.

Exemple

Exemplul 1: Chei, valori, perechi

void main() {
  final populatie = {'Iași': 271692, 'Cluj': 286598, 'Brașov': 237589};
  print(populatie.keys);
  print(populatie.values);
  print(populatie.entries.first);

  final total = populatie.values.fold(0, (s, n) => s + n);
  print('Total: $total locuitori');
  print('Orașe: ${populatie.keys.join(', ')}');
}

Rezultat

(Iași, Cluj, Brașov)
(271692, 286598, 237589)
MapEntry(Iași: 271692)
Total: 795879 locuitori
Orașe: Iași, Cluj, Brașov

Exemplul 2: Parcurgerea perechilor cu entries

Din Dart 3, un pattern MapEntry(:key, :value) scoate direct cheia și valoarea din fiecare pereche.

void main() {
  final note = {'Ana': 10, 'Mihai': 7, 'Ioana': 9};
  for (final MapEntry(:key, :value) in note.entries) {
    print('$key: ${value >= 8 ? 'promovat cu brio' : 'promovat'}');
  }

  final ordonate = note.entries.toList()..sort((a, b) => b.value.compareTo(a.value));
  print('Primul: ${ordonate.first.key}');
}

Rezultat

Ana: promovat cu brio
Mihai: promovat
Ioana: promovat cu brio
Primul: Ana

Exemplul 3: Ștergere sigură în timpul parcurgerii

Ștergerea direct din note.keys în buclă oprește programul. Cu o copie toList() merge.

void main() {
  final note = {'Ana': 10, 'Mihai': 4, 'Ioana': 9, 'Radu': 3};
  for (final nume in note.keys.toList()) {
    if (note[nume]! < 5) {
      note.remove(nume);
    }
  }
  print(note);
}

Rezultat

{Ana: 10, Ioana: 9}

Greșeli frecvente

  • Modifici map-ul (adaugi sau ștergi chei) în timp ce parcurgi keys, values sau entries. Apare ConcurrentModificationError. Parcurge o copie sau folosește removeWhere.
  • Încerci map.keys[0]. Un Iterable nu are []; folosește first, elementAt(0) sau toList()[0].

Comenzi înrudite

  • Map: Colecție de perechi cheie–valoare: cauți rapid o valoare după cheia ei (nume, cod, oraș).
  • MapEntry: O pereche cheie–valoare: ce primești din map.entries și ce returnezi din Map.map.
  • Map.forEach: Cheamă o funcție pentru fiecare pereche cheie–valoare din map, în ordinea din map.
  • Map.removeWhere: Șterge din map toate perechile pentru care funcția de test returnează true.
  • Iterable: Tipul de bază pentru orice colecție care poate fi parcursă element cu element: List, Set, cheile unui Map.