【问题标题】:How to get a list of elements from a list of tuples?如何从元组列表中获取元素列表?
【发布时间】:2021-07-22 06:28:33
【问题描述】:

如何获取元组列表中的元素? 例如

list = [(Tris, 23, 1.40), (Aif, 20 , 1.70)] 

我想要所有年龄段的人

[23,20]

我知道我可以使用

age = (_,x,_) = x 

但它只适用于元组,而不是列表中的元组。

【问题讨论】:

  • 你的意思可能是:age (_, x, _) = x

标签: haskell


【解决方案1】:

您将需要执行mapping,将列表中的每个项目映射到其年龄。

您可以使用map :: (a -> b) -> [a] -> [b] function 执行此操作,因此如下所示:

allAges = map …

我在哪里填写 作为练习。

【讨论】:

    【解决方案2】:

    你可以像这样递归地解决它:

    allages [] = []
    allages ((_,x,_):xs) = x : allages xs
    

    【讨论】:

      【解决方案3】:

      我知道我可以用

      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
      

      你就完成了。

      所以最后你确实知道该怎么做。

      【讨论】:

        猜你喜欢
        • 2014-12-16
        • 2019-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多