Maps a escala en Erlang
maps:fold, filter y merge trabajan la tabla entera de una vez.
%% maps:fold, filter, and merge work the whole table at once.
main(_) ->
Minutes = #{"5560199" => 12, "5560142" => 3, "5560170" => 21},
Total = maps:fold(fun(_, M, Acc) -> Acc + M end, 0, Minutes),
io:format("Billed minutes: ~p~n", [Total]),
Long = maps:filter(fun(_, M) -> M > 10 end, Minutes),
io:format("Long calls: ~p~n", [maps:size(Long)]),
Evening = #{"5560142" => 6, "5560188" => 9},
Merged = maps:merge(Minutes, Evening),
io:format("All lines: ~p~n", [maps:size(Merged)]),
io:format("5560142 now: ~p~n", [maps:get("5560142", Merged)]).
Cómo funciona
maps:foldenhebra un acumulador por cada par.maps:filterconserva las entradas que su fun aprueba.mergefavorece al segundo map en colisiones de clave.
Palabras clave y builtins usados aquí
endfungetsize
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 546
- Tokens
- 188
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 188 segundos.
Paso 4 de 4 en Formas de datos; paso 18 de 31 en Fundamentos del lenguaje.