Elixir-将两个键名和值与列表相似的地图合并?

时间:2019-03-05 17:11:59

标签: list nested maps elixir concat

我有两张地图:

a = %{ list: [1,2,3]}
b = %{ list: [4,5,6]}

我希望合并/合并两个嵌套列表,以使结果为:

c = %{ list: [1,2,3,4,5,6]}

我尝试研究深度合并,但就我而言,我有列表而不是嵌套地图。

2 个答案:

答案 0 :(得分:4)

您还可以使用Map.merge/3轻松处理这种情况。检查一下:

a = %{ list: [1,2,3] }
b = %{ list: [4,5,6] }
c = Map.merge(a, b, fn _, la, lb -> la ++ lb end)

享受!

答案 1 :(得分:2)

使用++运算符来串联列表

iex(1)> a = %{ list: [1,2,3]}
iex(2)> b = %{ list: [4,5,6]}
iex(3)> %{list:  a.list ++ b.list}
%{list: [1, 2, 3, 4, 5, 6]}

更多通用名称:

  def test_merge do
    a = %{ list: [1,2,3], list2: [10, 20]}
    b = %{ list2: [40, 30], list: [4,5,6]}
    keys = Map.keys(a)
    Enum.map(keys ,fn(key) -> {key, a[key] ++  b[key] }end) 
    |> Enum.into(%{})
  end

结果:

%{list: [1, 2, 3, 4, 5, 6], list2: [10, 20, 40]}