Elixir:将具有相同地图键的列表合并到一张地图 [英] Elixir: Merge list with same map keys to one map
本文介绍了Elixir:将具有相同地图键的列表合并到一张地图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在长生不老药中转换此列表
How can I convert this list in elixir
[
%{key1: 1, key2: 2, key3: 3},
%{key1: 4, key2: 5, key3: 6},
%{key1: 7, key2: 8, key3: 9}
]
此地图
%{key1: [1, 4, 7], key2: [2, 5, 8], key3: [3, 6, 9])
?
推荐答案
Enum.reduce(input, %{key1: [], key2: [], key3: []}, fn m, acc ->
Map.merge(acc, m, fn _k, v1, v2 -> v1 ++ [v2] end)
end)
#⇒ %{key1: [1, 4, 7], key2: [2, 5, 8], key3: [3, 6, 9]}
或,没有预先进行硬编码的累加器:
or, without preliminar hardcoded accumulator:
Enum.reduce(input, %{}, fn m, acc ->
Map.merge(acc, m, fn
_k, v1, v2 when is_list(v1) ->
:lists.reverse([v2 | :lists.reverse(v1)])
_k, v1, v2 -> [v1, v2]
end)
end)
#⇒ %{key1: [1, 4, 7], key2: [2, 5, 8], key3: [3, 6, 9]}
这篇关于Elixir:将具有相同地图键的列表合并到一张地图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文