9
我看到Dict模块中有一个update
,但更改所有值的方法怎么样?如何更改Elixir地图中的所有值
我试着用Enum.map
这样做,但类型发生变化:
iex(6)> Enum.map(%{:a => 2}, fn {k, v} -> {k, v + 1} end)
[a: 3]
我看到Dict模块中有一个update
,但更改所有值的方法怎么样?如何更改Elixir地图中的所有值
我试着用Enum.map
这样做,但类型发生变化:
iex(6)> Enum.map(%{:a => 2}, fn {k, v} -> {k, v + 1} end)
[a: 3]
,你可以管Enum.into(%{})
或使用for
理解,即:
iex> for {k, v} <- %{a: 1, b: 2}, into: %{}, do: {k, v + 1}
%{a: 2, b: 3}
这里有一个想法:
def update_map map, [head|tail], func do
update_map(
Dict.update(map, head, :unknown, func),
tail,
func
)
end
def update_map map, [], _ do
map
end
然后调用它:
iex(1)> d = %{:a => 1, :b => 2, :c => 3}
%{a: 1, b: 2, c: 3}
iex(2)> update_map(d, Dict.keys(d), fn v -> v + 1 end)
%{a: 2, b: 3, c: 4}