Agrupar en OCaml
Agrupa por clave con un pliegue a lista de asociación y clasifica.
(* Group by key with a fold into an assoc list, then rank. *)
let sightings =
[("north", 12); ("ledge", 31); ("north", 8); ("cove", 5);
("ledge", 4)]
let totals =
List.fold_left
(fun acc (pool, n) ->
let so_far = Option.value ~default:0 (List.assoc_opt pool acc) in
(pool, so_far + n) :: List.remove_assoc pool acc)
[] sightings
let () =
totals
|> List.sort (fun (_, a) (_, b) -> compare b a)
|> List.iter (fun (pool, n) -> Printf.printf "%-6s %3d\n" pool n)
Cómo funciona
- El pliegue busca, suma y re-frontea el total de cada pool.
List.remove_assocbota el par viejo antes del cons.- Invertir el comparador ordena los totales descendentes.
Palabras clave y builtins usados aquí
funinlet
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 460
- Tokens
- 145
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 145 segundos.
Paso 4 de 4 en Listas; paso 14 de 29 en Fundamentos del lenguaje.