如何展平映射列表?Elixir中合并列表内映射的实现方法
合并单个键值对Map列表为单个Map的Elixir实现方案
嘿,这个需求在Elixir开发里太常见了!针对你给出的res1 = [%{1 => 123}, %{2 => 456}],我给你分享几种简洁高效的实现方式:
方法一:用Enum.reduce + Map.merge(通用且灵活)
这是最基础也最通用的写法,适合后续需要扩展逻辑的场景:Enum.reduce(res1, %{}, fn single_map, acc -> Map.merge(acc, single_map) end)原理很简单:从空Map
%{}开始,逐个把列表里的小Map和累加器acc合并,最终得到完整的合并结果。方法二:用Enum.into(极简写法)
如果不需要额外逻辑,这是最简洁的实现,一行搞定:Enum.into(res1, %{})Enum.into/2会自动把枚举列表中的每个Map合并到目标空Map里,内部逻辑和上面的reduce+merge一致,但代码更紧凑。方法三:FlatMap转列表再构建Map(直观易懂)
另一种思路是先把每个小Map转成键值对列表,展平后再用Map.new/1构建完整Map:res1 |> Enum.flat_map(&Map.to_list/1) |> Map.new()这个写法逻辑更直观,适合刚接触Elixir的开发者理解整个转换过程。
注意:如果你的列表里存在重复键的小Map,所有方法都会用后面的键值对覆盖前面的,这符合Elixir中Map的特性。
内容的提问来源于stack exchange,提问作者Ojrojako
相关产品推荐
相关产品推荐

