Elixir:将具有相同地图键的列表合并到一张地图 [英] Elixir: Merge list with same map keys to one map

查看:61
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆