假设我有这张地图
old = %{stuff: %{old: 123}}
如何更新密钥stuff:
?
我还有其他地图:
new = %{stuff: %{new: 321}}
使用Map.put它会覆盖填充键,我也尝试了Map.merge但它没有合并,它会覆盖第二个地图的键
iex(22)> Map.merge(test, new)
%{stuff: %{new: 321}}
我希望有类似的东西:
%{stuff: %{old: 123, new: 321}}
答案 0 :(得分:3)
我能想到的两种方式:
使用update_in
:
iex(1)> old = %{stuff: %{old: 123}}
%{stuff: %{old: 123}}
iex(2)> update_in(old, [:stuff], &Map.put(&1, :new, 321))
%{stuff: %{new: 321, old: 123}}
使用Map.merge/3
使用Map.merge/2
合并这两个值:
iex(3)> new = %{stuff: %{new: 321}}
%{stuff: %{new: 321}}
iex(4)> Map.merge(old, new, fn k, v1, v2 -> Map.merge(v1, v2) end)
%{stuff: %{new: 321, old: 123}}