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

Elixir使用Enum.reduce过滤User列表合并Subject数据生成新映射列表

实现代码

首先提前提取Subject中需要复用的公共字段,再通过Enum.reduce遍历用户列表完成筛选和合并:

# 提取公共字段,避免遍历过程中重复取值
common = %{
  sub_id: subject.sub_id,
  sub_name: subject.content.sub_name
}

result = Enum.reduce(users, [], fn user, acc ->
  if user.status == "A" do
    # 结构体转普通映射后取所需字段,和公共字段合并
    merged = 
      user
      |> Map.from_struct()
      |> Map.take([:id, :name])
      |> Map.merge(common)
    
    acc ++ [merged]
  else
    # 不符合条件直接返回原有累加器
    acc
  end
end)

说明

  • 如果需要保留User结构体的所有字段,去掉Map.take([:id, :name])这一行即可
  • 若处理的用户列表量级很大,可以把acc ++ [merged]替换为[merged | acc],最后对结果做一次反转,性能更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:12:02