zipWith

Empareja dos iterables y combina cada par a través de una función, en un solo paso.

Iterable<C> zipWith<A, B, C>(C Function(A a, B b) f, Iterable<A> iterable1, Iterable<B> iterable2) FxAsyncIterable<C> zipWithAsync<A, B, C>(FutureOr<C> Function(A a, B b) f, FxAsyncIterable<A> iterable1, FxAsyncIterable<B> iterable2)

Lección

zipWith es exactamente zip seguido de map sobre los pares resultantes — de hecho así está implementado en FxDart, como map((r) => f(r.$1, r.$2), zip(...)). Recurre a él cuando en realidad no quieres el record (A, B) intermedio, sino solo el resultado combinado: multiplicar dos listas paralelas, formatear un nombre y una edad en una sola etiqueta, y cosas así.

Se detiene en la más corta de las dos entradas, igual que zip, y la forma asíncrona zipWithAsync hereda de zipAsync el tirar en paralelo por par. No hay forma encadenable en Fx para zipWith: llama directamente a la función de nivel superior (o constrúyela tú mismo como .zip(other).map((r) => f(r.$1, r.$2))).

Demo 1 · Fundamentos

Demo 2 · Asíncrono

Pruébalo tú

Ejercicio: usa zipWith para calcular el total de línea (price * quantity) de cada par.

Relacionado: zip — la versión de pares simples sobre la que se construye · zipWithIndex — emparejar con un índice creciente · map