sortByDesc
비교 가능한 어떤 키든 내림차순으로 — 부호 반전 트릭은 은퇴했습니다.
List<A> sortByDesc<A>(Object? Function(A a) f, Iterable<A> iterable)
Future<List<A>> sortByDescAsync<A>(Object? Function(A a) f, FxAsyncIterable<A> iterable)
Fx<T> Fx<T>.sortByDesc(Object? Function(T a) f) // chain (sync)
Future<List<T>> FxAsync<T>.sortByDesc(Object? Function(T a) f) // chain (async)
강의
순위표는 가장 큰 값이 먼저 오길 원하는데, 지금까지 유일한 한 줄짜리
해법은 sortBy((a) => -key)였습니다 —
숫자에만 통하는 트릭이죠. 날짜, 문자열, 그 밖의 모든
Comparable에는 마이너스 부호가 없습니다.
sortByDesc는 비교 방향만 뒤집은
sortBy입니다. 같은 키 추출(키는
원소당 정확히 한 번 계산), double/int/String
키에 대한 같은 언박싱 고속 경로, 입력을 절대 변형하지 않는 같은
계약을 공유합니다.
이 연산자가 대체하는 고전적인 형태가 "상위 N" 순위입니다.
sortByDesc(key).take(n)은 쓰인 그대로 읽히는 반면,
오름차순 표기는 부호 반전과 그것을 설명하는 주석까지
필요했습니다. 날짜의 "최신순"에는 이것이 유일한 직접적인 표기법입니다.
Dart 고유의 추가 기능입니다 — 이름은 Kotlin의
sortedByDescending을 따릅니다. 전체 순서가 아니라 가장 큰
원소 하나만 필요하다면 정렬을 통째로 건너뛰세요.
maxBy가 O(n)입니다.
데모 1 · 부호 반전 없는 순위
데모 2 · 숫자로 흉내 낼 수 없는 키
직접 해 보기
연습: 아무것도 반전하지 않고 최신순으로 정렬해 보세요.