Haskell使用代理订单排序不可共享的列表

时间:2010-07-05 06:32:44

标签: haskell sorting

假设我有x :: [(n, a)],其中n是数字,a是不可订购的项目(不属于Ord类)。

我想通过n。

对此列表进行排序

我无法sort x因为a无法订购。我可以用索引替换a,然后使用!!汇总新列表,但这似乎是一个糟糕的解决方案。

替代?

3 个答案:

答案 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)就可以了(结果列表只有在列表顺序中具有相同第一个组件的对)。