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

如何在ETS中获取目标值?仅提取值而非键值对的方法

获取ETS查询结果中的值

推荐方案:用:ets.lookup_element/3直接取值

:ets.lookup/2会返回包含键值元组的列表,而:ets.lookup_element/3是Erlang提供的专用函数,能直接返回目标值,省去处理列表的步骤:

# 假设表中存储的是 {key, value} 格式的元组
value = :ets.lookup_element(:table, key, 2)

第三个参数2指定取元组的第2个元素(也就是值的位置),如果你的元组结构是{key, field_a, field_b}这类多字段格式,只需把这个数字改成对应值的位置即可。

注意:如果查询的键不存在,这个函数会抛出ArgumentError。要避免异常的话,可以先判断键是否存在:

value = if :ets.member(:table, key) do
  :ets.lookup_element(:table, key, 2)
else
  # 键不存在时的默认值,比如nil或者自定义逻辑
  nil
end

备选方案:模式匹配处理:ets.lookup/2的结果

如果已经调用了:ets.lookup/2,可以通过模式匹配直接提取值:

case :ets.lookup(:table, key) do
  [{^key, target_value}] -> target_value
  [] -> nil  # 键不存在时返回nil,或者写你的处理逻辑
end

如果你的ETS表是set类型(默认类型),:ets.lookup/2最多返回一个元组,上述模式匹配完全安全。要是用的是bag或duplicate_bag类型(允许多个相同键的条目),可以把结果转成值的列表:

values = :ets.lookup(:table, key) |> Enum.map(fn {_, val} -> val end)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:06:46