Ce face List.asMap
asMap() returnează o vedere a listei ca Map<int, E>: cheile sunt pozițiile 0, 1, 2, …, iar valorile sunt elementele. Nu copiază nimic; dacă lista se schimbă, vederea vede schimbarea. Vederea nu poate fi modificată direct.
Este utilă când ai nevoie de pozițiile elementelor, de exemplu cu forEach((i, x) {...}) sau entries. În Dart 3, indexed face același lucru cu records.
Ce returnează
Un Map<int, E> nemodificabil, legat de listă.
Exemple
Exemplul 1: Poziții și elemente
void main() {
final podium = ['Ana', 'Mihai', 'Ioana'];
final harta = podium.asMap();
print(harta);
harta.forEach((i, nume) => print('Locul ${i + 1}: $nume'));
podium[0] = 'Vlad';
print('după schimbare: ${harta[0]}');
}
Rezultat
{0: Ana, 1: Mihai, 2: Ioana}
Locul 1: Ana
Locul 2: Mihai
Locul 3: Ioana
după schimbare: Vlad
Exemplul 2: Pozițiile notelor maxime
void main() {
final note = [10, 8, 10, 9];
final pozitii = note.asMap().entries.where((e) => e.value == 10).map((e) => e.key);
print('Nota 10 la pozițiile: ${pozitii.toList()}');
}
Rezultat
Nota 10 la pozițiile: [0, 2]
Greșeli frecvente
- Încerci
lista.asMap()[5] = x: vederea nu poate fi modificată și aruncăUnsupportedError. Modifică lista.
Comenzi înrudite
Iterable.indexed: Perechi (poziție, element) pentru fiecare element, utile în for-in cu destructurare.Map: Colecție de perechi cheie–valoare: cauți rapid o valoare după cheia ei (nume, cod, oraș).List.indexOf: Găsește poziția unui element (prima sau ultima apariție) sau a primului element care trece un test; -1 dacă nu există.