Mar*_*cin 4 haskell list-comprehension
我正在尝试编写一个函数
group::[(Int, Int)]->[[(Int, Int)]]
Run Code Online (Sandbox Code Playgroud)
这会将元组列表的元素分组为依赖于第一个坐标的子组,即:
group [(1,1),(1,2),(2,1),(2,2),(2,3)]
Run Code Online (Sandbox Code Playgroud)
应该导致
[[(1,1),(1,2)],[(2,1),(2,2),(2,3)]]
Run Code Online (Sandbox Code Playgroud)
我认为列表理解是方式,但我有点卡住..有人可以提供建议/解决方案吗?
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)]]
Run Code Online (Sandbox Code Playgroud)
这个on函数在这里用来缩短代码而不会混淆它:
?: groupBy ((==) `on` fst) [(1,1),(1,2),(2,1),(2,2),(2,3)]
[[(1,1),(1,2)],[(2,1),(2,2),(2,3)]]
Run Code Online (Sandbox Code Playgroud)