Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 更新或合并地图_Elixir - Fatal编程技术网

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)