count

지연 파이프라인이 만들어내는 원소가 몇 개인지 셉니다.

int count<A>(Iterable<A> iterable) Future<int> countAsync<A>(FxAsyncIterable<A> iterable) int Fx.length // sync chain: inherited Iterable getter, no parens Future<int> FxAsync.count() // async chain method int size<A>(Iterable<A> iterable) // FxTS alias

강의

count는 원소를 전부 훑으면서 개수를 세는 종결 연산자입니다 — 지름길은 없습니다. 상류 파이프라인이 지연 계산되는 map/filter 체인이라면 실제로 값을 끌어당기기 전까지는 길이가 정해져 있지 않기 때문입니다. 즉 100만 개짜리 rangefilter를 걸고 count를 호출하면 정말로 100만 개를 모두 순회합니다. 다만 그 과정에서 List를 만들지는 않습니다. count가 Dart다운 이름이고, fxdart는 FxTS식 표기인 size도 함께 받습니다 — 같은 연산자입니다.

어떤 원소 타입에서도 동작합니다 — 숫자 전용 종결 연산자 (sum, min, max, average)와 달리 count는 이터러블 안에 무엇이 들었는지는 신경 쓰지 않고 몇 개인지만 봅니다.

동기 체인에서 count바로 Dart에서 물려받은 Iterable.length 게터입니다(괄호 없음). FxIterable이므로 fx(pipeline).length가 체인을 훑으며 총 개수를 돌려줍니다. 이름 붙은 연산자로 쓰는 편이 좋다면 최상위 count(iterable)를, .count()비동기 체인에서 쓰세요. 이미 구체적인 List를 들고 있다면 .length가 공짜입니다 — count는 지연 체인의 결과를 List로 — toList를 거쳐 — 먼저 구체화하지 않고 개수만 세고 싶을 때 꺼내 쓰는 도구입니다.

데모 1 · 기본

데모 2 · 비동기

직접 해 보기

연습: 재고 없음(값이 == 0)인 항목이 몇 개인지 세어 보세요.

관련 항목: average — 내부적으로 count와 같은 방식으로 개수를 셉니다 · isEmpty — "하나라도 있나?"만 알면 될 때 더 저렴한 검사 · toList — 세는 대신 구체화하기