zipWith
두 이터러블을 zip하면서 각 쌍을 함수로 결합하는 것을 한 번에 처리합니다.
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)
강의
zipWith는 zip 뒤에 그 쌍들에 대한
map을 붙인 것과 정확히 같습니다 — 실제로 FxDart의 구현도
map((r) => f(r.$1, r.$2), zip(...))입니다. 중간의
(A, B) 레코드는 필요 없고 결합한 결과만 원할 때
꺼내 쓰세요. 나란히 놓인 두 리스트를 곱하거나, 이름과 나이를 하나의
라벨로 포맷하는 식으로 말이죠.
zip과 마찬가지로 두 입력 중 짧은 쪽에서 멈추며, 비동기
형태인 zipWithAsync는 zipAsync의 쌍마다 병렬로
끌어오는 동작을 그대로 물려받습니다. zipWith에는
Fx 체인 형태가 없으므로 최상위 함수를 직접 호출하세요
(또는 .zip(other).map((r) => f(r.$1, r.$2))로 직접
만들어도 됩니다).
데모 1 · 기본
데모 2 · 비동기
직접 해 보기
연습: zipWith로 쌍마다 품목 합계
(price * quantity)를 계산해 보세요.