sort

Devuelve una lista ordenada completamente nueva a partir de un comparador — nunca muta su entrada.

List<A> sort<A>(int Function(A a, A b) f, Iterable<A> iterable) List<A> toSorted<A>(int Function(A a, A b) f, Iterable<A> iterable) // alias of sort Future<List<A>> sortAsync<A>(int Function(A a, A b) f, FxAsyncIterable<A> iterable) Fx<T> Fx.sort(int Function(T a, T b) f) // chain (sync) — still lazy, call .toList() Future<List<T>> FxAsync.sort(int Function(T a, T b) f) // chain (async) — already a terminal

Lección

sort recibe un comparador estándar de Dart — devuelve negativo si a debe ir antes que b, positivo si va después, cero si empatan — y produce un resultado ordenado. La diferencia importante con Array.prototype.sort de JavaScript (y de FxTS) es que el sort de FxDart nunca muta su entrada. Siempre crea una List nueva (List.of(iterable)..sort(f)), dejando el iterable original tal cual estaba. FxTS añadió más tarde toSorted como alternativa no mutante a su sort mutante; en FxDart, toSorted es simplemente un alias — como sort ya era no mutante, no quedaba nada que diferenciar.

Hay un matiz en la forma de cadena que conviene señalar explícitamente: en la cadena síncrona Fx, .sort(f) devuelve otro Fx<T> — no una List<T> — porque Fx envuelve la lista ordenada subyacente para seguir siendo encadenable. Sigues necesitando un terminal como .toList() para obtener una List concreta. La cadena asíncrona no tiene esa peculiaridad: FxAsync.sort(f) ya es un terminal que devuelve Future<List<T>> directamente, porque FxAsync no puede devolverse a sí mismo desde algo que necesita hacer await de todo el pipeline primero.

Recurre a sortBy en su lugar cuando solo quieras ordenar por una clave que extraes, en vez de escribir el comparador tú mismo.

Demo 1 · Fundamentos, sin mutación, y toSorted

Demo 2 · Asíncrono — ya es un terminal

Pruébalo tú

Ejercicio: ordena los números en orden descendente.

Relacionado: sortBy — ordena por una clave extraída en lugar de un comparador · reverse — invierte el orden de los elementos sin comparar · partition — divide en dos listas según un predicado