transpose

Convierte una colección de filas en una colección de columnas.

Iterable<List<A>> transpose<A>(Iterable<Iterable<A>> rows) FxAsyncIterable<List<A>> transposeAsync<A>(Iterable<FxAsyncIterable<A>> rows)

Lección

transpose es zip generalizado a cualquier número de iterables: la n-ésima lista de salida contiene el n-ésimo elemento de cada fila de entrada que aún tenga uno. Mientras que zip/zip3 toman cada fila como un argumento aparte (porque Dart no puede expresar genéricos variádicos), transpose toma todas las filas como un único iterable de iterables — transpose([row1, row2, row3]) — así que funciona para cualquier número de filas decidido en tiempo de ejecución.

A diferencia de zip, que para en cuanto se agota la entrada más corta, transpose sigue mientras alguna fila todavía tenga valores: una fila más corta simplemente deja de contribuir a las listas de salida posteriores, que pueden acabar siendo más cortas que el número de filas. Solo se detiene del todo cuando se han agotado todas las filas.

Demo 1 · Fundamentos & filas desiguales

Demo 2 · Asíncrono

Pruébalo tú

Ejercicio: transpón la matriz (las filas pasan a ser columnas).

Relacionado: zip — el caso particular de dos filas · chunk — agrupa antes una fuente plana en filas · reverse