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,valuessauentries. ApareConcurrentModificationError. Parcurge o copie sau foloseșteremoveWhere. - Încerci
map.keys[0]. UnIterablenu are[]; foloseștefirst,elementAt(0)sautoList()[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.