Elixir 更新或合并地图
假设我有这张地图Elixir 更新或合并地图,elixir,Elixir,假设我有这张地图 old = %{stuff: %{old: 123}} 如何更新密钥内容: 我还有另外一张地图: new = %{stuff: %{new: 321}} 对于Map.put,它将覆盖stuff键,我也尝试了Map.merge,但它没有合并,它将用第二个Map覆盖该键 iex(22)> Map.merge(test, new) %{stuff: %{new: 321}} 我想要一些类似于: %{stuff: %{old: 123, new: 321}} 我可以想到两
old = %{stuff: %{old: 123}}
如何更新密钥内容:
我还有另外一张地图:
new = %{stuff: %{new: 321}}
对于Map.put,它将覆盖stuff键,我也尝试了Map.merge,但它没有合并,它将用第二个Map覆盖该键
iex(22)> Map.merge(test, new)
%{stuff: %{new: 321}}
我想要一些类似于:
%{stuff: %{old: 123, new: 321}}
我可以想到两种方法:
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}}
我可以想到两种方法:
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}}
也是三,
{uU,result}=Map.get_和_update(%%{stuff:%%{old:123}},:stuff,fn-cv->{cv,Map.merge(cv,%%{new:456}})end)
.3{uU,result}=Map.get_和_update(%%{stuff:%%{old:123},:stuff,fn-cv->{cv,Map.merge(cv,%%{new:456})}end)
。