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 · 숫자로 흉내 낼 수 없는 키

직접 해 보기

연습: 아무것도 반전하지 않고 최신순으로 정렬해 보세요.

관련 항목: sortBy — 오름차순 쌍둥이 · maxBy — 최상위 원소만 필요할 때 한 번의 순회 · take — 모든 "상위 N"의 나머지 절반