typestar

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

  1. El pliegue busca, suma y re-frontea el total de cada pool.
  2. List.remove_assoc bota el par viejo antes del cons.
  3. Invertir el comparador ordena los totales descendentes.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 4 de 4 en Listas; paso 14 de 29 en Fundamentos del lenguaje.

← Anterior Siguiente →