按元组列表的第一个元素分组,并将函数应用于所有分组的第二个元素

时间:2016-12-01 22:32:53

标签: list haskell group-by tuples

我有一个清单

(+)

我希望得到一个元组列表,它按元组列表的第一个元素分组。另外,我想要为所有分组元组应用一个函数,例如:总和。

应用group by和函数[(8,2),(3,3),(10,8)] :: [(Int,Int)]后,我期待结果:

test :: Eq a => Tree a -> [(a,Int)] test t = map (foldl1 sumZahlwerte) grouped where grouped = groupBy (\c d -> fst c == fst d) (getTuple t) sumZahlwerte :: Eq a => (a,Int) -> (a,Int) -> (a,Int) sumZahlwerte (b,c) (_,e) = (b,c+e)

如何使用Haskell执行此操作?

修改

这不完全重复 How to group similar items in a list using Haskell?因为我还想知道如何将函数应用于分组元组列表中的每个第二个元素。

我尝试了以下内容,我认为它现在有效。

getTuple t

其中[(a,Int)]返回export Declaration列表。

感谢您的反馈。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

这似乎是一项家庭作业/学习任务,所以我只会给出一些提示:

  • 您已经命名了所需的最重要的功能groupBy(来自Data.List
  • 而且你需要分组的东西 - 你可以使用lambda表达式,或on模块提供的小函数Data.Function - (==) `on` fst将是一种惯用的写法这在haskell中,但是练习中写了一个lambda函数 - 就是“比较”
  • 在分组后,您有[[(Int,Int)]]类型的内容,并使用便捷的函数mapfoldr1,然后您可以添加这些对 - 前提是您有一个函数add2 :: (Int,Int) -> (Int,Int) -> (Int,Int)添加第二个组件