LL
Во всех остальных практически одинаковые медианы
Size: a a a
LL
SK
V
SK
V
SK
SK
V
V
SK
SK
SK
V
SK
V
fn map -> ... end
?SK
fold.({k, v}, acc)
Е
reduce
. Какая-то бесполезная синтетика получится.V
defmodule IterReduce do
def iter_reduce_superoptimized(map) do
do_iter_reduce_superoptimized(:maps.iterator(map), "", 0)
end
defp do_iter_reduce_superoptimized(iter, acc_k, acc_v) do
case :maps.next(iter) do
:none -> {acc_k, acc_v}
{k, v, next_iter} -> do_iter_reduce_superoptimized(next_iter, acc_k <> k, acc_v + v)
end
end
end
Benchee.run(%{
"IterReduce.iter_reduce_superoptimized" => fn map -> IterReduce.iter_reduce_superoptimized(map) end,
})
Comparison:
IterReduce.iter_reduce_superoptimized
IterReduce.iter_reduce_optimized 1.29x slower
:maps.fold unwrapped 1.29x slower
IterReduce.iter_reduce 1.39x slower
:maps.fold 1.59x slower
Enum.reduce 1.60x slower
SK
Е