我正在尝试编写一个函数
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 该函数还可以将第一个坐标可以采用的最大值作为参数,如果这有帮助的话
最佳答案
您可以使用 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)]]
关于Haskell 按 fst 对列表元素进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30590909/