Map.update în Dart

update schimbă valoarea unei chei pe baza valorii vechi; updateAll schimbă toate valorile din map.

Sintaxă
V update(K key, V update(V value), {V ifAbsent()?})
void updateAll(V update(K key, V value))

Ce face Map.update

update(cheie, (v) => nou) cheamă funcția cu valoarea actuală și pune în loc rezultatul. Dacă cheia lipsește, se folosește ifAbsent; fără ifAbsent, apelul aruncă ArgumentError.

updateAll((cheie, valoare) => nou) înlocuiește fiecare valoare din map cu rezultatul funcției. Cheile și ordinea rămân aceleași.

Parametri

Parametru Descriere
key Cheia a cărei valoare se schimbă.
update Funcția care primește valoarea veche (la updateAll: cheia și valoarea) și returnează valoarea nouă.
ifAbsent Opțional, la update: valoarea pusă când cheia lipsește.

Ce returnează

update returnează valoarea nouă. updateAll nu returnează nimic.

Exemple

Exemplul 1: Coșul de cumpărături

void main() {
  final cos = {'lapte': 1, 'pâine': 2};
  cos.update('lapte', (n) => n + 1);
  cos.update('ouă', (n) => n + 10, ifAbsent: () => 10);
  print(cos);

  try {
    cos.update('cafea', (n) => n + 1);
  } on ArgumentError catch (e) {
    print('Eroare: ${e.message}');
  }
}

Rezultat

{lapte: 2, pâine: 2, ouă: 10}
Eroare: Key not in map.

Exemplul 2: Scumpire cu 10% pentru toate produsele

void main() {
  final preturi = {'cafea': 20.0, 'ceai': 10.0, 'zahăr': 5.5};
  preturi.updateAll((produs, pret) => pret * 1.1);
  preturi.forEach((produs, pret) => print('$produs: ${pret.toStringAsFixed(2)} lei'));
}

Rezultat

cafea: 22.00 lei
ceai: 11.00 lei
zahăr: 6.05 lei

Exemplul 3: Numărare cu update și ifAbsent

void main() {
  final voturi = ['Ana', 'Radu', 'Ana', 'Ioana', 'Ana', 'Radu'];
  final rezultat = <String, int>{};
  for (final v in voturi) {
    rezultat.update(v, (n) => n + 1, ifAbsent: () => 1);
  }
  print(rezultat);
}

Rezultat

{Ana: 3, Radu: 2, Ioana: 1}

Greșeli frecvente

  • Chemi update pe o cheie care poate lipsi, fără ifAbsent. Apare ArgumentError.
  • Aștepți ca updateAll să poată adăuga sau șterge chei. Schimbă doar valorile; pentru ștergere folosește removeWhere.

Comenzi înrudite

  • Map.putIfAbsent: Returnează valoarea unei chei; dacă cheia lipsește, o calculează cu funcția dată, o salvează și o returnează.
  • Map.operator[]: map[cheie] citește valoarea unei chei (sau null), iar map[cheie] = valoare adaugă sau înlocuiește o pereche.
  • Map.map: Creează un map nou transformând fiecare pereche într-o pereche nouă, cu alte chei sau alte valori.
  • Map.removeWhere: Șterge din map toate perechile pentru care funcția de test returnează true.