2014-07-19 73 views
-1

如何根據第一個元素或第二個或第三個元素搜索元組?搜索超過2個元素的元組

我知道如何搜索兩個元組,但我怎麼做兩個以上?

type Stuff = (String, String, Int) 

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

我怎麼能寫,將搜索「東西」,並返回「INT」值的功能?

e.g searchStuff 「豆」 應該返回5.

+4

那麼......你到目前爲止試過了什麼?只有配對時才能找到它的解決方案是什麼?你會發現兩種情況之間沒有太大的區別。 – Cubic

+0

相同,過濾器+模式匹配 – 0xAX

回答

7

由於您沒有提供用於在配對列表中搜索的功能,因此我假設您使用了lookup。讓我們專注於您的新功能findfind可以Data.List(和Data.Foldable更一般的版本)中找到,有以下類型:

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

現在,如果你需要找到基於第一個元素三元組的列表的東西,你可以使用

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

但是,這會給你一個Maybe Stuff。但由於MaybeFunctor的一個實例,很容易將結果更改爲Maybe Int(並將其留作練習)。