indexed

Empareja cada elemento con su índice (empezando en 0): (index, value).

Iterable<(int, A)> indexed<A>(Iterable<A> iterable) FxAsyncIterable<(int, A)> indexedAsync<A>(FxAsyncIterable<A> iterable) Iterable<(int, T)> Fx.indexed // sync chain: inherited Iterable getter, no parens FxAsync<(int, T)> FxAsync.indexed() // async chain Iterable<(int, A)> zipWithIndex<A>(Iterable<A> iterable) // FxTS alias

Lección

indexed es un zip contra un contador implícito: cada elemento sale emparejado como (index, value), contando desde 0. Es la respuesta del pipeline perezoso al bucle manual for (var i = 0; i < list.length; i++): sin variable contador que gestionar, y se compone con el resto de la cadena. indexed es el nombre idiomático en Dart (refleja Iterable.indexed); fxdart también acepta zipWithIndex, la grafía de FxTS: son el mismo operador.

Como solo necesita llevar la cuenta de un contador, indexed sigue siendo perezoso y funciona igual de bien sobre una fuente infinita que sobre una finita; la versión asíncrona cuenta igual a medida que se resuelven los elementos.

Demo 1 · Fundamentos

Demo 2 · Asíncrono

Pruébalo tú

Ejercicio: empareja a cada corredor con su posición de llegada (empezando en 0).

Relacionado: zip — empareja dos iterables entre sí · zipWith — hace zip y combina en un solo paso · entries — empareja las claves de un Map con sus valores