我有一个元组列表([[(Int, Custom)]]
)的列表,我想通过比较整数来对外部列表进行排序。它应该像普通的二维排序一样,即它应该按照第一个列表项排序第一个,然后按第二个项排序等等 - 但是比较第一个部分而不是整个元组。
对于一维列表,我会使用sortBy (comparing fst)
,但我完全迷失了将它们包装在另一个列表中。我知道如果我将Custom
Ord
的实例设为{{3}},因为排序会自动生成,但它确实可以自动生效。
如果您想要一个示例和预期结果,请发表评论。提前谢谢!
答案 0 :(得分: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)]]