簡體   English   中英

如何從元組列表中獲取元素列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM