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
byTimellama asortBy (comparing snd), porquecomparingconvierte un accesor en la comparación que sortBy espera.byNameusasortOn fst, que calcula cada clave una vez y no en cada comparación.slowestFirstenvuelve esa clave comosortOn (Down . snd), yDowninvierte cualquier instancia de Ord.
Palabras clave y builtins usados aquí
DoubleDownStringimportmodulewhere
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.
Paso 3 de 3 en Clases de tipos; paso 21 de 27 en Fundamentos del lenguaje.