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
相关产品推荐
相关产品推荐

