Haskell按fst分组列表元素

时间:2015-06-02 08:23:19

标签: haskell list-comprehension

我试图写一个函数

group::[(Int, Int)]->[[(Int, Int)]]

将元组列表的元素分组为依赖于第一个坐标的子组,即:

group [(1,1),(1,2),(2,1),(2,2),(2,3)]

应该导致

[[(1,1),(1,2)],[(2,1),(2,2),(2,3)]]

我想象列表理解就是这样,但我有点卡住了......有人可以提供建议/解决方案吗?

PS函数也可以将第一个坐标可以采用的最大值作为参数,如果有任何帮助的话

1 个答案:

答案 0 :(得分:8)

您可以使用groupBy

执行此操作
λ: groupBy (\x y -> fst x == fst y) [(1,1),(1,2),(2,1),(2,2),(2,3)]
[[(1,1),(1,2)],[(2,1),(2,2),(2,3)]]

此处on函数可用于缩短代码而不会混淆代码:

λ: groupBy ((==) `on` fst) [(1,1),(1,2),(2,1),(2,2),(2,3)]
[[(1,1),(1,2)],[(2,1),(2,2),(2,3)]]