differenceBy
값 동등성 대신 계산된 키로 비교하는 difference입니다.
Iterable<A> differenceBy<A, B>(B Function(A a) f, Iterable<A> iterable1, Iterable<A> iterable2)
FxAsyncIterable<A> differenceByAsync<A, B>(FutureOr<B> Function(A a) f, FxAsyncIterable<A> iterable1, FxAsyncIterable<A> iterable2)
Fx<T> Fx<T>.differenceBy<B>(B Function(T a) f, Iterable<T> other) // chain: values of the chain not keyed in other
강의
differenceBy(f, iterable1, iterable2)는
difference와 완전히 동일한
인자 순서 규칙을 따릅니다. 결과는
iterable2에서 나오며,
f로 만든 키가 결코 iterable1의
f-키에 나타나지 않는 원소만 남습니다(결과 안의 중복은 제거됩니다).
f 함수는 양쪽 이터러블에 모두 적용되므로,
일부 언어의 differenceBy와 달리 두 인자는 같은 원소 타입
A를 공유해야 합니다. 비교되는 것은 파생된 키 타입
B뿐입니다.
"제외 목록"과 "원본 목록"이 단순한 값이 아니라 온전한 레코드일 때
꺼내 쓰게 되는 형태입니다. 차단된 사용자 객체 목록과 사용자 객체
목록을 id로 맞추거나, 품절 상품 목록과 상품 카탈로그를
sku로 맞추는 경우가 그렇습니다.
difference 자체가 사실
differenceBy((a) => a, iterable1, iterable2)입니다. 둘 다
체인 메서드가 없으니 data-first 함수를 직접 호출하세요. 비동기 쪽에서는
differenceAsync와 마찬가지로 동시성 표시가
iterable2에 적용됩니다.
데모 1 · 기본
데모 2 · 비동기, 그리고 동시성
직접 해 보기
연습: differenceBy를 'sku' 키 기준으로 써서
아직 구매 가능한 상품을 찾아보세요.
관련 항목:
difference — 값 동등성으로 비교하는 버전 ·
intersectionBy — 반대로 공통 키를 가진 원소만 남기기 ·
uniqBy — 키 기준으로 이터러블 하나에서 중복 제거 ·
compress — 나란한 불리언 마스크로 필터링