Elixir - 将两个具有相似键名和值的地图合并为列表?
Elixir - Merging two maps with similar key names and values as lists?
我有两张地图:
a = %{ list: [1,2,3]}
b = %{ list: [4,5,6]}
我希望 merge/concat 两个嵌套列表,这样的结果是:
c = %{ list: [1,2,3,4,5,6]}
我已经尝试研究深度合并,但就我而言,我有列表而不是嵌套映射。
使用 ++
运算符连接列表
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]}
您也可以使用Map.merge/3来轻松处理这种情况。看看:
a = %{ list: [1,2,3] }
b = %{ list: [4,5,6] }
c = Map.merge(a, b, fn _, la, lb -> la ++ lb end)
尽情享受吧!
我有两张地图:
a = %{ list: [1,2,3]}
b = %{ list: [4,5,6]}
我希望 merge/concat 两个嵌套列表,这样的结果是:
c = %{ list: [1,2,3,4,5,6]}
我已经尝试研究深度合并,但就我而言,我有列表而不是嵌套映射。
使用 ++
运算符连接列表
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]}
您也可以使用Map.merge/3来轻松处理这种情况。看看:
a = %{ list: [1,2,3] }
b = %{ list: [4,5,6] }
c = Map.merge(a, b, fn _, la, lb -> la ++ lb end)
尽情享受吧!