【发布时间】:2023-03-03 18:09:01
【问题描述】:
我有一个清单
[(8,2),(3,2),(3,1),(10,2),(10,6)] :: [(Int,Int)]
我想得到一个元组列表,它按元组列表的第一个元素分组。我也想为所有分组元组应用一个函数,例如总和。
在应用 group by 和函数 (+) 之后,我期待结果:
[(8,2),(3,3),(10,8)] :: [(Int,Int)]
我怎样才能用 Haskell 做到这一点?
编辑
这不是与 How to group similar items in a list using Haskell? 因为我还想知道如何将函数应用于分组元组列表中的每个第二个元素。
我尝试了以下方法,我认为它现在可以工作了。
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)
其中getTuple t 返回一个[(a,Int)] 列表。
非常感谢您的反馈。感谢您的帮助!
【问题讨论】:
-
你尝试了什么?
-
我认为我可以使用groupBy function。但我不知道怎么做。
-
没错。现在你只需要一个函数,它接受两个元组,如果它们的第一个元素相等则返回 True。请注意,
group仅对连续元素进行分组。
标签: list haskell group-by tuples