搜索超过2个元素的元组

时间:2014-07-19 17:12:27

标签: haskell

如何根据第一个元素或第二个或第三个元素搜索元组?

我知道如何搜索两个元组,但我怎么做两个以上呢?

type Stuff = (String, String, Int)

testStuff :: [Stuff]
testStuff = [
    ("beans","black",5),
    ("cod","fish",4),
    ("coke","diet",3)
]

我怎样才能编写一个能够搜索" Stuff"并返回" int"值?

例如searchStuff" beans"应该返回5.

2 个答案:

答案 0 :(得分:7)

由于您还未提供在对列表中进行搜索的功能,因此我假设您使用了lookup。让我们专注于find您的新功能。可以在Data.List中找到find(以及Data.Foldable中的更一般版本)并具有以下类型:

find :: (a -> Bool) -> [a] -> Maybe a

现在,如果您需要根据第一个元素在三元组列表中找到某些内容,可以使用

find (\(a,_,_) -> a == "beans") testStuff

但是,这将为您留下Maybe Stuff。但由于MaybeFunctor的一个实例,因此很容易将结果更改为Maybe Int(并留作练习)。

答案 1 :(得分:2)

The Prelude defines lookup to handle searching a list of pairs。以下是定义:

-- | 'lookup' @key assocs@ looks up a key in an association list.
lookup                  :: (Eq a) => a -> [(a,b)] -> Maybe b
lookup _key []          =  Nothing
lookup  key ((x,y):xys)
    | key == x          =  Just y
    | otherwise         =  lookup key xys

你能看到如何定义一个类似的函数来搜索三元组列表吗?