sortByDesc

Ordena por cualquier clave comparable, descendente — el truco de la negación, jubilado.

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)

Lección

Los rankings quieren su valor más grande primero, y hasta ahora la única línea posible era sortBy((a) => -key) — un truco que funciona solo con números. Las fechas, las cadenas y cualquier otro Comparable no tienen signo menos. sortByDesc es sortBy con la comparación invertida: misma extracción de claves (cada clave se calcula exactamente una vez), mismos atajos sin boxing para claves double/int/String, mismo contrato de nunca mutar la entrada.

La forma clásica que reemplaza es el ranking «top N»: sortByDesc(key).take(n) se lee tal como está escrito, donde la variante ascendente necesitaba la negación y un comentario explicándola. Para «lo más nuevo primero» sobre fechas es directamente la única escritura posible.

Adición nativa de Dart — el nombre sigue al sortedByDescending de Kotlin. Cuando solo necesitas el elemento más grande y no el orden completo, sáltate el orden entero: maxBy es O(n).

Demo 1 · Rankings sin negación

Demo 2 · Claves que los números no pueden fingir

Pruébalo tú

Ejercicio: lo más nuevo primero sin negar nada.

Relacionados: sortBy — el gemelo ascendente · maxBy — una sola pasada cuando solo importa el primero · take — la otra mitad de todo «top N»