typestar

Ord y ordenamiento en Haskell

Tres ordenamientos de una lista: sortBy con comparador, sortOn con clave y Down para invertir.

module RaceResults where

import Data.List (sortBy, sortOn)
import Data.Ord (Down (..), comparing)

-- Each runner with the seconds they posted.
results :: [(String, Double)]
results = [("ana", 12.4), ("bo", 11.9), ("cy", 13.1), ("di", 11.9)]

-- comparing lifts an accessor into the comparison sortBy wants.
byTime :: [(String, Double)]
byTime = sortBy (comparing snd) results

-- sortOn computes each key once instead of on every comparison.
byName :: [(String, Double)]
byName = sortOn fst results

-- Down reverses any Ord instance, which is how you sort descending.
slowestFirst :: [(String, Double)]
slowestFirst = sortOn (Down . snd) results

Cómo funciona

  1. byTime llama a sortBy (comparing snd), porque comparing convierte un accesor en la comparación que sortBy espera.
  2. byName usa sortOn fst, que calcula cada clave una vez y no en cada comparación.
  3. slowestFirst envuelve esa clave como sortOn (Down . snd), y Down invierte cualquier instancia de Ord.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
20
Caracteres a escribir
648
Tokens
117
Ritmo de tres estrellas
70 tpm

Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 100 segundos.

Escribe este fragmento

Paso 3 de 3 en Clases de tipos; paso 21 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →