indexWhere
술어가 true인 첫 번째 원소의 인덱스를 반환하며, 없으면 -1을 반환합니다.
int indexWhere<A>(bool Function(A a) f, Iterable<A> iterable)
Future<int> indexWhereAsync<A>(FutureOr<bool> Function(A a) f, FxAsyncIterable<A> iterable)
int Fx.indexWhere(bool Function(T a) f) // chain
Future<int> FxAsync.indexWhere(FutureOr<bool> Function(T a) f) // chain
int findIndex<A>(bool Function(A a) f, Iterable<A> iterable) // FxTS alias
강의
indexWhere는 Dart다운 이름이고(List.indexWhere와
짝을 이룹니다), fxdart는 FxTS식 표기인 findIndex도 함께
받습니다 — 같은 연산자입니다. find의 형제로서 지연 평가와
단락 평가로 훑는 방식은 똑같지만, 일치한 값 자체가 아니라 그것이
어디에 있었는지를 알려 줍니다. "찾지 못했음"을 나타내는 값이
다르다는 점에 주의하세요 — 여기서는 int 타입의
-1이며, 자바스크립트의
Array.prototype.findIndex를 따른 것입니다. 모두
null을 쓰는 head/find/nth와
의도적으로 대비되는 선택입니다. 인덱스에는 "불가능한 값"이 자연스럽게
존재하므로, FxDart는 int? 반환 타입을 새로 만들기보다
이 지점에서는 FxTS의 관례를 그대로 따릅니다.
내부적으로는 각 원소를 인덱스와 짝지은 뒤(zipWithIndex 사용)
f를 통과하는 첫 번째 원소에서 멈춥니다.
데모 1 · 기본
데모 2 · 단락 평가와 비동기
직접 해 보기
연습: indexWhere로 큐에서 bob의 위치를 찾고, 없으면 -1을 받아 보세요.
관련 항목:
find — 같은 탐색, 값을 반환 ·
includes — 그저 "있는가?"만 확인 ·
nth — 그 반대: 인덱스를 넣고 값을 받기 ·
zipWithIndex — 내부 동작을 떠받치는 함수