You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Elixir中归约含重复名称的Map列表并累加count字段

解决Elixir中Map列表按名称分组并累加count的问题

嘿,我来帮你搞定这个问题!你当前的代码在处理单个元素分组时出错,核心原因是**Enum.reduce在没有指定初始值时的行为**:当分组后的列表只有一个元素时,reduce会直接返回该元素本身,而不会执行你写的累加逻辑,这就导致像third这样的单个元素,最终的count变成了整个Map而不是它的数值。

方法一:给Enum.reduce指定初始值

只需要给reduce加上初始值0,并调整累加逻辑,这样不管分组里有多少个元素,都会从0开始累加count:

all_maps 
|> Enum.group_by(&(&1.name)) 
|> Enum.map(fn {key, value} -> 
  %{name: key, count: value |> Enum.reduce(0, fn(x, acc) -> x.count + acc end)} 
end)

方法二:用Enum.sum简化逻辑

另一种更直观的方式是先把分组里所有元素的count提取出来,再用Enum.sum求和,可读性更强:

all_maps 
|> Enum.group_by(&(&1.name)) 
|> Enum.map(fn {key, value} -> 
  %{name: key, count: value |> Enum.map(&(&1.count)) |> Enum.sum()} 
end)

用你的示例列表测试这两种方法,都会得到期望的结果:

[%{count: 15, name: "first"}, %{count: 82, name: "second"}, %{count: 11, name: "third"}]

内容的提问来源于stack exchange,提问作者Elmseld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:47:17