sort-by y into en Clojure
Una caja de discos ordenada por año y por reproducciones, y luego vertida con into.
(def crate
[{:title "Blue Train" :year 1958 :plays 31}
{:title "Kind of Blue" :year 1959 :plays 88}
{:title "Maiden Voyage" :year 1965 :plays 12}])
;; sort uses compare's natural ordering on a plain collection
(println (sort [1965 1958 1959]) (sort ["rye" "ash" "elm"]))
;; sort-by takes a key fn, and a keyword is the usual one
(println (map :title (sort-by :year crate)))
;; (comp - :plays) negates the key, which flips the order
(println (map :title (sort-by (comp - :plays) crate)))
;; into pours one collection into another and keeps the target's type
(println (into [] (map :year crate))
(into #{} [1 1 2 3])
(into {} [[:a 1] [:b 2]]))
Cómo funciona
(sort [1965 1958 1959])usa el orden natural de compare sobre una colección simple.(sort-by :year crate)usa un keyword de clave, y(sort-by (comp - :plays) crate)la niega e invierte el orden.intoconserva el tipo destino:(into #{} [1 1 2 3])pierde el duplicado y(into {} [[:a 1] [:b 2]])da un mapa.
Palabras clave y builtins usados aquí
compdefintomapprintlnsort
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 645
- Tokens
- 121
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 104 segundos.
Paso 2 de 3 en Herramientas de seq; paso 17 de 27 en Fundamentos del lenguaje.