1

我有一个元组列表 ( [[(Int, Custom)]]) 列表,我想通过将整数相互比较来对外部列表进行排序。它应该像普通的二维排序一样,即它应该按第一个列表项对第一个项进行排序,然后按第二个项进行排序,依此类推——但比较的是第一个部分而不是整个元组。

对于我会使用的一维列表sortBy (comparing fst),但我完全迷失了将它们包裹在另一个列表中。我知道如果我将我Custom的一个实例 Ord作为排序自动工作,它会自动工作,但它并不是真正可订购的。

如果您想要一个示例和预期结果,请发表评论。提前致谢!

4

1 回答 1

3

呃,在问完这个问题后,它像中风一样击中了我:

comparing需要一个返回可排序结果的函数,而不是 Ordering 或排序的部分列表[(Int, Custom)](不可排序):

comparing :: Ord a => (b -> a) -> b -> b -> Ordering
comparing = on compare

所以我必须返回的是可排序整数的列表,即map fst. 共:

sortBy (compare `on` map fst)
  :: Ord a => [[(a, b)]] -> [[(a, b)]]
于 2012-12-20T18:53:18.637 回答