标签: 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函数也可以将第一个坐标可以采用的最大值作为参数,如果有任何帮助的话
答案 0 :(得分:8)
您可以使用groupBy
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函数可用于缩短代码而不会混淆代码:
on
λ: groupBy ((==) `on` fst) [(1,1),(1,2),(2,1),(2,2),(2,3)] [[(1,1),(1,2)],[(2,1),(2,2),(2,3)]]