Hm.. the following benchmark now shows a different result…
is_even? = fn x -> rem(x, 2) == 0 end
Benchee.run(
%{
"reduce" => fn range ->
Enum.reduce(range, %{}, fn elem, acc -> Map.update(acc, is_even?.(elem), 1, &(&1 + 1)) end)
end,
"group" => fn range ->
Enum.group_by(range, &is_even?.(&1)) |> Map.new(fn {key, list} -> {key, length(list)} end)
end
},
inputs: %{
"Range" => 1..1_000_000
}
)
##### With input Range #####
Name ips average deviation median 99th %
reduce 4.65 215.08 ms ±12.47% 209.29 ms 338.53 ms
group 2.47 405.21 ms ±18.65% 411.79 ms 552.56 ms
Comparison:
reduce 4.65
group 2.47 - 1.88x slower +190.13 ms
So your original hunch, might be correct after all.


















