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부터 시작하는) 완주 순위와 짝지어 보세요.

관련 항목: zip — 두 이터러블을 짝지어 묶습니다 · zipWith — 묶으면서 한 번에 결합합니다 · entries — Map의 키와 값을 짝지어 줍니다