Ce face Iterable.indexed
indexed (Dart 3.0) returnează un iterable leneș de records (int, E): poziția elementului, de la 0, și elementul. Cu pattern-uri îl desfaci direct în buclă: for (final (i, x) in lista.indexed).
Merge pe orice iterable, nu doar pe liste: pe un set, pe cheile unui map sau pe rezultatul lui where. Pe liste, alternativa mai veche este asMap().
Ce returnează
Un Iterable<(int, E)> leneș.
Exemple
Exemplul 1: Clasament numerotat
void main() {
final clasament = ['Ana', 'Mihai', 'Ioana'];
for (final (i, nume) in clasament.indexed) {
print('${i + 1}. $nume');
}
print(clasament.indexed.toList());
}
Rezultat
1. Ana
2. Mihai
3. Ioana
[(0, Ana), (1, Mihai), (2, Ioana)]
Exemplul 2: Pozițiile elementelor care trec un test
void main() {
final temperaturi = [18, 31, 25, 33, 29];
final pozitii = temperaturi.indexed.where((p) => p.$2 > 30).map((p) => p.$1);
print('Zile caniculare (poziții): ${pozitii.toList()}');
}
Rezultat
Zile caniculare (poziții): [1, 3]
Greșeli frecvente
- Inversezi ordinea în record: primul câmp (
$1) este poziția, al doilea ($2) este elementul.
Comenzi înrudite
List.asMap: Privește lista ca un Map nemodificabil de la poziție la element.Iterable.elementAt: Returnează elementul de la o poziție; elementAtOrNull returnează null dacă poziția nu există.Iterable.map: Transformă fiecare element cu o funcție și returnează un iterable nou, leneș, cu rezultatele.