如何根据第一个元素或第二个或第三个元素搜索元组?
我知道如何搜索两个元组,但我怎么做两个以上呢?
type Stuff = (String, String, Int)
testStuff :: [Stuff]
testStuff = [
("beans","black",5),
("cod","fish",4),
("coke","diet",3)
]
Run Code Online (Sandbox Code Playgroud)
如何编写一个搜索"Stuff"并返回"int"值的函数?
例如,searchStuff"beans"应该返回5.
由于您没有提供在对列表中搜索的功能,我将假设您使用了lookup.让我们专注于find您的新功能.find可以在Data.List(以及更通用的版本Data.Foldable)中找到并具有以下类型:
find :: (a -> Bool) -> [a] -> Maybe a
Run Code Online (Sandbox Code Playgroud)
现在,如果你需要根据第一个元素在三元组列表中找到一些东西,你可以使用
find (\(a,_,_) -> a == "beans") testStuff
Run Code Online (Sandbox Code Playgroud)
但是,这将留给你一个Maybe Stuff.但由于Maybe是一个实例Functor,很容易将结果更改为Maybe Int(并留作练习).