Haskell:在元组列表中查找第一个元素为 x 的元组

Haskell: Find tuple with first element x in list of tuples

如果我的问题不清楚,请允许我解释一下。假设我有 tuples :: [(a, Int)]。我使用 zip 创建了这个。现在,我想为我的 a 元素找到相应的 Int 值。我想弄清楚我是怎么做到的。

f :: [(a, Int)] -> a -> Int

以上是我需要的函数类型

或者在ghci中需要如何使用:

let tuples = zip ['a','b','c'] [1..]

f tuples 'a'

returns: 1

有一个

lookup :: Eq a => a -> [(a, b)] -> Maybe b

在序曲中。它 returns 一个 Maybe 因为您正在查找的项目可能不在列表中。

但是你并没有要求安全,而且参数顺序与你所要求的不同,所以它没有准确地回答你的问题

正如其他答案所说,您可能希望使用 lookup :: Eq a => a -> [(a, b)] -> Maybe b (source-code)。您可以以无点样式实现它,如 lookup key = fmap snd . safeHead . filter ((== key) . fst).

要在列表中不存在密钥时降低安全性,只需将 safeHead :: [a] -> Maybe a 替换为 head :: [a] -> a,并简单地更改参数顺序 flip :: (a -> b -> c) -> b -> a -> c.

因此,要找到您的初始规格,我们可以:

myLookup :: Eq a => [(a, b)] -> a -> b
myLookup = flip myLookup'
    where myLookup' key = snd . head . filter ((== key) . fst)