partition

술어 하나로 파이프라인을 두 개의 리스트로 한 번에 나눕니다.

(List<A>, List<A>) partition<A>(bool Function(A a) f, Iterable<A> iterable) Future<(List<A>, List<A>)> partitionAsync<A>(FutureOr<bool> Function(A a) f, FxAsyncIterable<A> iterable) (List<T>, List<T>) Fx.partition(bool Function(T a) f) Future<(List<T>, List<T>)> FxAsync.partition(FutureOr<bool> Function(T a) f)

강의

partition은 파이프라인을 한 번만 순회하면서 술어를 기준으로 모든 원소를 두 리스트 중 하나에 넣는 종결 연산자입니다. 술어가 true를 반환한 원소는 첫 번째 리스트로, 나머지는 두 번째 리스트로 갑니다. filterreject를 따로 호출하는 것과 같지만, 데이터를 한 번만 훑는다는 점이 다릅니다.

FxTS는 두 개짜리 튜플 [pass, fail]을 반환합니다. Dart에는 JS 배열 같은 튜플 타입이 없으므로 FxDart는 네이티브 Dart 레코드를 씁니다: (List<A>, List<A>). 두 리스트는 .$1(통과)과 .$2(탈락)로 꺼내거나, 패턴 매칭 문법으로 바로 구조 분해할 수 있습니다: final (pass, fail) = partition(f, iterable);. 이는 FxDart의 다른 곳에서 zipentries가 따르는 튜플-레코드 규약과 동일합니다.

이 섹션의 다른 종결 연산자와 마찬가지로, 상류의 지연 파이프라인 전체를 끌어당깁니다. 동기든 비동기든 마찬가지입니다.

데모 1 · 기본과 구조 분해

데모 2 · 비동기

직접 해 보기

연습: 점수를 합격(>= 60)과 불합격(< 60)으로 나눠 보세요.

관련 항목: filter · reject — partition이 합쳐 놓은 두 갈래 · groupBy — 셋 이상의 그룹으로 묶기 · sort — 필요하다면 각 갈래 안에서 정렬하기