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

Elixir如何遍历map列表并对嵌套字段累加且保留原有属性?

实现方案

你出现外层属性丢失的核心原因是修改字段时没有复用原有外层map,而是手动构造了仅包含a、b字段的新map,改用Elixir内置的map更新逻辑即可解决,以下是可直接运行的实现:

写法1:Enum.reduce + Map.put 通用写法

result = Enum.map(a, fn outer_map ->
  # 计算嵌套c列表的x、y总和
  sum_c = Enum.reduce(outer_map.c, 0, fn %{x: x, y: y}, acc -> acc + x + y end)
  # 仅更新c字段,保留原map所有其他属性
  Map.put(outer_map, :c, sum_c)
end)

写法2:推导式+管道符 简洁写法

result = for %{c: c_list} = outer_map <- a do
  sum_c = c_list |> Enum.map(&(&1.x + &1.y)) |> Enum.sum()
  # Elixir原生map更新语法,仅修改指定键值
  %{outer_map | c: sum_c}
end

两种写法输出的结果完全符合你的预期:

[
  %{a: 1, b: 2, c: 8},
  %{a: 3, b: 4, c: 10},
  %{a: 5, b: 6, c: 14}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:39:03