【发布时间】:2014-10-31 07:52:02
【问题描述】:
如何排序这个列表
[("apple",3),("apple",-2),("pear",1)]
按元组中的第二个元素,按绝对值,所以
[("pear",1),("apple",-2),("apple",3)]
【问题讨论】:
-
sortWith f == sortBy (comparing f) == sortBy (compareon` f)`。它们都完全相同,一件事。 decorate-sort-undecorate 模式是实质性的,尽管可以进一步讨论。 -
@WillNess 我的其他答案是否与您在评论中指出的方向一致?
-
@Boris 通常需要使用 costly “key”(即“to-sort-by”)功能;这里不需要,因为只有
abs会重新计算多次,而且很便宜。您的第二个功能很接近,但最好使用sortBy (comparing fst3) ... where fst3(a,_,_)=a而不是sort,以消除其他字段对排序的任何影响(对于重复键)。此外,不必使用fst3,通常您会以嵌套方式排列数据,因此可以使用普通的fst。