Ce face Map
Un Map<K, V> leagă fiecare cheie de tipul K de o valoare de tipul V. Cheile sunt unice: dacă pui din nou aceeași cheie, valoarea veche este înlocuită. Cel mai des creezi un map cu acolade: {'Ana': 10, 'Mihai': 8}.
Un map creat cu acolade sau cu Map() este de fapt un LinkedHashMap: păstrează ordinea în care au fost adăugate cheile, deci print și buclele îl parcurg mereu în aceeași ordine.
length spune câte perechi are map-ul, iar isEmpty și isNotEmpty verifică rapid dacă este gol.
Ce returnează
Constructorul Map() returnează un map gol, care păstrează ordinea inserării.
Exemple
Exemplul 1: Note la informatică
Cheia este numele elevului, valoarea este nota. Ordinea de afișare este ordinea în care au fost adăugați elevii.
void main() {
final note = {'Ana': 10, 'Mihai': 8, 'Ioana': 9};
print(note);
print('Elevi: ${note.length}');
note['Radu'] = 7;
note['Mihai'] = 9;
print(note);
print('Nota Ioanei: ${note['Ioana']}');
}
Rezultat
{Ana: 10, Mihai: 8, Ioana: 9}
Elevi: 3
{Ana: 10, Mihai: 9, Ioana: 9, Radu: 7}
Nota Ioanei: 9
Exemplul 2: Map gol, length, isEmpty și isNotEmpty
void main() {
final stoc = <String, int>{};
print('gol: ${stoc.isEmpty}, lungime: ${stoc.length}');
stoc['mere'] = 40;
stoc['pere'] = 15;
if (stoc.isNotEmpty) {
print('Avem ${stoc.length} produse: $stoc');
}
final altul = Map<String, double>();
altul['pâine'] = 4.5;
print(altul);
}
Rezultat
gol: true, lungime: 0
Avem 2 produse: {mere: 40, pere: 15}
{pâine: 4.5}
Exemplul 3: Numărarea cuvintelor
Un exemplu clasic: pentru fiecare cuvânt crești un contor păstrat în map.
void main() {
const text = 'ana are mere ana are pere ion are mere';
final contor = <String, int>{};
for (final cuvant in text.split(' ')) {
contor[cuvant] = (contor[cuvant] ?? 0) + 1;
}
print(contor);
}
Rezultat
{ana: 2, are: 3, mere: 2, pere: 1, ion: 1}
Greșeli frecvente
- Te aștepți ca
map['cheie']să returnezeint. Rezultatul esteint?, pentru că cheia poate lipsi; folosește??sau verifică întâi cucontainsKey. - Crezi că două perechi pot avea aceeași cheie. A doua atribuire înlocuiește valoarea, nu adaugă o pereche nouă.
Comenzi înrudite
Map.operator[]: map[cheie] citește valoarea unei chei (sau null), iar map[cheie] = valoare adaugă sau înlocuiește o pereche.Map.keys: keys, values și entries dau cheile, valorile sau perechile unui map, ca Iterable, în ordinea din map.Map.containsKey: containsKey verifică dacă o cheie există în map, iar containsValue dacă o valoare apare la vreo cheie.Map.forEach: Cheamă o funcție pentru fiecare pereche cheie–valoare din map, în ordinea din map.LinkedHashMap: Map care păstrează ordinea inserării cheilor; este tipul implicit al map-urilor scrise cu acolade.HashMap: Map bazat pe tabel hash, fără ordine garantată a cheilor; puțin mai ușor decât LinkedHashMap.