Ce face Map.fromIterable
Map.fromIterable(lista, key: ..., value: ...) calculează pentru fiecare element o cheie și o valoare. Fără funcții, elementul este și cheie, și valoare. Parametrii funcțiilor sunt de tip dynamic, deci în codul nou se preferă un literal cu for: {for (final x in lista) cheie: valoare}.
Map.fromIterables(chei, valori) pune prima cheie cu prima valoare, a doua cu a doua și așa mai departe. Cele două iterable trebuie să aibă aceeași lungime; altfel apare ArgumentError.
Parametri
| Parametru | Descriere |
|---|---|
iterable |
Elementele din care se calculează perechile. |
key / value |
Funcțiile care dau cheia și valoarea pentru un element. |
keys / values |
Pentru fromIterables: cheile și valorile, în aceeași ordine. |
Ce returnează
Un Map nou (un LinkedHashMap).
Exemple
Exemplul 1: Lungimea fiecărui nume
void main() {
final nume = ['Ana', 'Mihai', 'Ioana'];
final lungimi = Map<String, int>.fromIterable(nume, value: (n) => (n as String).length);
print(lungimi);
final laFel = {for (final n in nume) n: n.length};
print(laFel);
}
Rezultat
{Ana: 3, Mihai: 5, Ioana: 5}
{Ana: 3, Mihai: 5, Ioana: 5}
Exemplul 2: Două liste lipite într-un map
void main() {
final zile = ['luni', 'marți', 'miercuri'];
final temperaturi = [18, 21, 19];
final meteo = Map.fromIterables(zile, temperaturi);
print(meteo);
try {
Map.fromIterables(zile, [1, 2]);
} on ArgumentError catch (e) {
print('Eroare: ${e.message}');
}
}
Rezultat
{luni: 18, marți: 21, miercuri: 19}
Eroare: Iterables do not have same length.
Greșeli frecvente
- Dai liste de lungimi diferite lui
fromIterables. ApareArgumentError, nu se taie automat la cea mai scurtă. - Folosești
fromIterablefără tipuri și primești unMap<dynamic, dynamic>. Scrie tipurile,Map<String, int>.fromIterable(...), sau folosește un literal cufor.
Comenzi înrudite
Map.fromEntries: Construiește un map dintr-o succesiune de perechi MapEntry, de exemplu entries filtrate sau sortate.Map.of: Map.of face o copie modificabilă a unui map; Map.unmodifiable face o copie care nu mai poate fi schimbată.collection if și for: if și for direct în interiorul unei liste, set sau map, pentru a construi colecția dintr-o singură expresie.