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를 반환한 원소는 첫 번째 리스트로, 나머지는
두 번째 리스트로 갑니다.
filter와
reject를 따로 호출하는 것과
같지만, 데이터를 한 번만 훑는다는 점이 다릅니다.
FxTS는 두 개짜리 튜플 [pass, fail]을 반환합니다. Dart에는
JS 배열 같은 튜플 타입이 없으므로 FxDart는 네이티브 Dart
레코드를 씁니다: (List<A>, List<A>).
두 리스트는 .$1(통과)과 .$2(탈락)로 꺼내거나,
패턴 매칭 문법으로 바로 구조 분해할 수 있습니다:
final (pass, fail) = partition(f, iterable);. 이는 FxDart의
다른 곳에서 zip과
entries가 따르는 튜플-레코드
규약과 동일합니다.
이 섹션의 다른 종결 연산자와 마찬가지로, 상류의 지연 파이프라인 전체를 끌어당깁니다. 동기든 비동기든 마찬가지입니다.
데모 1 · 기본과 구조 분해
데모 2 · 비동기
직접 해 보기
연습: 점수를 합격(>= 60)과 불합격(< 60)으로 나눠 보세요.