sort
비교자로 정렬한 완전히 새로운 리스트를 반환합니다 — 입력은 절대 변경하지 않습니다.
강의
sort는 Dart의 표준 비교자를 받습니다 —
a가 b보다 앞이면 음수, 뒤면 양수,
동등하면 0을 반환하는 그 함수입니다 — 그리고 정렬된 결과를 만들어
냅니다. JavaScript(그리고 FxTS)의
Array.prototype.sort와 결정적으로 다른 점은
FxDart의 sort가 입력을 절대 변경하지 않는다는
것입니다. 언제나 새 List를 할당하며
(List.of(iterable)..sort(f)),
원본 이터러블은 그대로 남습니다. FxTS는 나중에 원본을 변경하는
sort에 대해 변경을 일으키지 않는 대안으로
toSorted를 추가했지만,
FxDart에서 toSorted는 그저 별칭입니다 —
sort가 이미 원본을 건드리지 않으니 구분할 이유가
없기 때문입니다.
체인 형태에는 짚고 넘어갈 만한 미묘한 점이
하나 있습니다. 동기 Fx 체인에서 .sort(f)는
또 다른 Fx<T>를 반환합니다 —
List<T>가 아닙니다. Fx가 계속 체이닝할 수 있도록 내부의 정렬된
리스트를 감싸기 때문입니다. 여전히
.toList() 같은 종결
연산자를 거쳐야 구체적인 List를 얻을 수 있습니다.
비동기 체인에는 이런
사정이 없습니다. FxAsync.sort(f)는 그 자체가 종결
연산자로서 Future<List<T>>를 바로 반환하는데,
파이프라인 전체를 먼저 await해야 하는 연산에서
FxAsync가 자기 자신을 반환할 수는 없기 때문입니다.
비교자를 직접 작성하는 대신 추출한 키를 기준으로 정렬하고 싶다면
sortBy를 쓰세요.
데모 1 · 기본 사용법, 원본 불변, 그리고 toSorted
데모 2 · 비동기 — 이미 종결 연산자
직접 해 보기
연습: 숫자를 내림차순으로 정렬해 보세요.