如何根据第一个元素或第二个或第三个元素搜索元组?
我知道如何搜索两个元组,但我怎么做两个以上呢?
type Stuff = (String, String, Int)
testStuff :: [Stuff]
testStuff = [
("beans","black",5),
("cod","fish",4),
("coke","diet",3)
]
我怎样才能编写一个能够搜索" Stuff"并返回" int"值?
例如searchStuff" beans"应该返回5.
答案 0 :(得分:7)
由于您还未提供在对列表中进行搜索的功能,因此我假设您使用了lookup
。让我们专注于find
您的新功能。可以在Data.List
中找到find
(以及Data.Foldable
中的更一般版本)并具有以下类型:
find :: (a -> Bool) -> [a] -> Maybe a
现在,如果您需要根据第一个元素在三元组列表中找到某些内容,可以使用
find (\(a,_,_) -> a == "beans") testStuff
但是,这将为您留下Maybe Stuff
。但由于Maybe
是Functor
的一个实例,因此很容易将结果更改为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
你能看到如何定义一个类似的函数来搜索三元组列表吗?