Нет ли стандартной функции lib, которая позволяла бы выполнять функцию map_values
над map
:
Map.map_values(%{a: 30, b: 45}, fn v -> v*2 end) # = %{a: 60, b: 90}
Лучший способ, который я нашел, это:
Enum.map(%{a: 30, b: 45}, fn {k, v} -> {k, map_fn(v)}) |> Enum.into(%{})
который я нахожу довольно тяжелым, так как я использую это довольно часто...
Альтернативой этому является для понимания, например
a = %{a: 30, b: 45}
for {k, v} <- a, into: %{} do
{k, v + 1}
end
выход :
%{a: 31, b: 46}
Таким образом вы не создаете промежуточный список, потому что Enum.map
возвращает список, а затем вам нужно преобразовать его в карту.
Здесь важной частью является into: %{}
, потому что, если вы его опустите, он вернет вам список по умолчанию.
Хорошая работа! Enum лучше, чем Map. Это работает и на Эликсире 1.1.