[英]How to get a list of elements from a list of tuples?
如何獲取元組列表中的元素? 例如
list = [(Tris, 23, 1.40), (Aif, 20 , 1.70)]
我想要所有年齡
[23,20]
我知道我可以使用
age = (_,x,_) = x
但它只適用於元組,而不適用於列表中的元組。
您需要對列表中的每個項目執行map
ping,將其映射到其年齡。
你可以用map :: (a -> b) -> [a] -> [b]
function 來做到這一點,所以這看起來像:
allAges = map …
我留下填寫…
作為練習。
你可以遞歸地解決它,如:
allages [] = []
allages ((_,x,_):xs) = x : allages xs
age (_,x,_) = x
你為什么這么說? 當然如果你知道
age (_,x,_) = x
那么你也知道
ages [(_,x,_)] = [x]
和
ages [(_,x,_), (_,y,_)] = [x,y]
ages [(_,x,_), (_,y,_), (_,z,_)] = [x,y,z]
....
等等 因為我們已經確定了
ages [ (_,y,_), (_,z,_)] = [ y,z]
ages [ (_,z,_)] = [ z]
所以肯定
ages [ ] = [ ]
我們可以寫下這些方程,
ages [ ] = [ ]
ages ([(_,x,_)] ++ moreTuples) = ages [(_,x,_)] ++ ages moreTuples
並且因為我們知道ages [(_,x,_)] = [x]
,它是
ages [ ] = [ ]
ages ([(_,x,_)] ++ moreTuples) = [ x ] ++ ages moreTuples
所以現在要讓它成為有效的 Haskell 語法,剩下的就是使用:
運算符重寫第一個方程的參數,沿着
[ a ] ++ moreTuples ==
a : moreTuples
你就完成了。
所以最后你確實知道如何做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.