我想写一个函数
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函数还可以将第一个坐标的最大值作为参数,如果有任何帮助的话。
发布于 2015-06-02 08:28:38
您可以使用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)]]https://stackoverflow.com/questions/30590909
复制相似问题