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

Haskell中如何从二元组列表查找指定键并绑定对应值

实现方案

方案1:使用Prelude原生lookup函数(推荐)

Haskell标准Prelude内置的lookup函数就是专门为关联列表查询设计的,无需自行实现递归:

  • 函数签名:lookup :: Eq a => a -> [(a, b)] -> Maybe b
  • 逻辑:遍历列表,返回第一个匹配键的元素值,存在则返回Just 对应值,不存在返回Nothing

示例代码:

myList = [("sd", 55), ("s", 2), ("fgff", 23), ("s", 999)]

-- 直接调用,返回Maybe类型
lookup "s" myList -- 运行结果为 Just 2

-- 若确定键一定存在,可以解包得到原始值(注意:不存在时会抛出运行时错误)
import Data.Maybe (fromJust)
v = fromJust $ lookup "s" myList -- v 的值为 2

方案2:支持("s", v) = ...模式匹配的写法

如果需要用你要求的模式匹配形式直接绑定值,可以配合filter和head实现:

myList = [("sd", 55), ("s", 2), ("fgff", 23), ("s", 999)]

-- 先过滤出所有键为"s"的元素,取第一个后直接模式匹配
("s", v) = head $ filter (\(key, _) -> key == "s") myList

-- 此时v的值直接绑定为2

注意该写法同样在无匹配项时会因为head调用空列表抛出运行时错误,仅适合确认存在对应键的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:24:01