indexed
각 원소를 (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
강의
indexed는 암묵적인 카운터와 zip하는
것이라고 보면 됩니다. 각 원소는 0부터 올라가는
(index, value) 쌍으로 나옵니다. 손으로 쓰던
for (var i = 0; i < list.length; i++) 루프를
지연 파이프라인에서 대체하는 방법이죠 — 따로 관리할 카운터 변수가 없고,
체인의 나머지 부분과 자연스럽게 조합됩니다. indexed가
Dart다운 이름이고(Iterable.indexed를 그대로 따릅니다),
fxdart는 FxTS식 표기인 zipWithIndex도 함께 받습니다 —
같은 연산자입니다.
증가하는 카운터 하나만 추적하면 되기 때문에
indexed는 지연 평가를 유지하며, 유한한 소스뿐
아니라 무한한 소스에서도 똑같이 잘 동작합니다. 비동기 형태도
원소가 완료되는 대로 같은 방식으로 번호를 매깁니다.
데모 1 · 기본
데모 2 · 비동기
직접 해 보기
연습: 각 주자를 (0부터 시작하는) 완주 순위와 짝지어 보세요.