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

Elixir 如何按指定条件过滤Map中的键值对条目

Elixir 过滤符合条件的Map条目实现方案

你可以直接使用Map.filter/2或者Enum.filter/2配合Map.new/0实现需求,不需要组合Enum.map和Enum.each:

  • Enum.each仅用于执行副作用,返回值固定为:ok,无法得到处理后的集合
  • Enum.map用于对等转换所有集合元素,不适合直接做过滤操作

最简实现(Elixir 1.13+ 推荐)

直接调用原生Map.filter/2方法:

input_map = %{"A" => [needed: true], "B" => [needed: false]}
result = Map.filter(input_map, fn {_key, attrs} -> attrs[:needed] end)

运行后result的值为%{"A" => [needed: true]},完全符合预期。

全版本兼容实现

如果使用低于1.13的Elixir版本,先过滤枚举再转换为Map即可:

input_map = %{"A" => [needed: true], "B" => [needed: false]}
result = 
  input_map
  |> Enum.filter(fn {_key, attrs} -> attrs[:needed] end)
  |> Map.new()

边界情况处理

如果部分条目的属性列表可能不存在:needed键,可以设置默认值避免逻辑异常:

# 不存在:needed属性的条目默认判定为不符合条件,会被过滤
Map.filter(input_map, fn {_key, attrs} -> Keyword.get(attrs, :needed, false) end)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:06:04