【问题标题】:Filter list of tuples to output list using a conditional使用条件过滤元组列表以输出列表
【发布时间】:2019-09-11 17:43:55
【问题描述】:

我想使用 Haskell 中的标准 Prelude(无递归,无列表推导)过滤元组列表,然后输出整数列表。它应该检查包含整数的三元组列表,例如,

[(1,2,3), (2,3,7), (4,5,20)]

并查看元素#1 和#2 的总和是否等于元素#3。如果是,则将元素#3 放入列表中,然后输出列表。这是我正在寻找的输出:

>sumOfElements [(1,2,3), (2,3,7), (4,5,9)]
[3,9]

这是我尝试过的:

sumsOfElements :: [(Int, Int, Int)] -> [Int]
sumsOfElements list = filter (\(a,b,c) -> a+b==c) list

这种工作,但它输出满足条件的元组列表。

>sumOfElements [(1,2,3), (2,3,7), (4,5,9)]
[(1,2,3), (4,5,9)]

我不确定如何从元组中获取 c 并将该元素附加到新的输出列表中。

【问题讨论】:

    标签: function haskell filter functional-programming tuples


    【解决方案1】:

    将其视为一条管道:首先找到正确的元素,然后将它们转换为您需要的形状:

    sumOfElements = map (\(_,_,c) -> c) . filter (\(a,b,c) -> a+b==c)
    

    相信懒惰和优化(特别是 foldr/build fusion)会让它变得高效。

    【讨论】:

      【解决方案2】:

      您可以通过列表推导更简洁地做到这一点:

      sumOfElements list = [c | (a,b,c) <- list, a+b==c]
      

      【讨论】:

      • “我想使用标准的前奏(不是递归或列表理解)”
      猜你喜欢
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 2016-11-15
      相关资源
      最近更新 更多