假设我有x :: [(n, a)]
,其中n是数字,a是不可订购的项目(不属于Ord类)。
我想通过n。
对此列表进行排序我无法sort x
因为a
无法订购。我可以用索引替换a
,然后使用!!
汇总新列表,但这似乎是一个糟糕的解决方案。
替代?
答案 0 :(得分:12)
唉。没关系。 sortBy
。
答案 1 :(得分:5)
你想要
sortBy (compare `on` fst)
或类似的东西。
您会在模块on
中找到Data.Function
,在sortBy
中找到您需要导入的Data.List
。
答案 2 :(得分:2)
此外,如果您有一个替代函数(例如,称之为f
)来形成订单,您可以使用订购的Data.Monoid属性:
sortBy (comparing fst `mappend` comparing (f . snd))
将在对的第二个组件上使用您的函数。如果您不需要或者没有第二个标准可以对您的对进行排序,那么sortBy (comparing fst)
就可以了(结果列表只有在列表顺序中具有相同第一个组件的对)。