Haskell 按 fst 对列表元素进行分组

标签 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 该函数还可以将第一个坐标可以采用的最大值作为参数,如果这有帮助的话

最佳答案

您可以使用 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/

相关文章:

haskell - 使用 ExistentialQuantification 扩展时派生显示?

database - 尝试使用持久性时没有 Control.Monad.Logger.MonadLogger 的实例

haskell - 在 Haskell 中将 Int 划分为 Int

python - 将列表推导式传递给 Python 中的函数

python - 有没有办法使用列表理解来计算特定条件下按元素分组的频率,但不计算其他元素的频率?

haskell - 将 Haskell Web 应用程序部署到低规范服务器

Haskell:使用列表理解解析错误(可能是不正确的缩进或不匹配的括号)

Python:生成器上列表理解中的 If 语句

python - 从类定义中的列表理解访问类变量

list-comprehension - Perl 6 列表理解