按降序对Enumerable
进行排序的最佳方法是什么?
我一直在做@array.sort.reverse
或@array.sort_by{|song| song.title }.reverse
我想我可以做@array.sort{|a, b| b.title <=> a.title}
这样的事情,但我发现这很难阅读和详细。
答案 0 :(得分:5)
Array.reverse
的效果不是非常坏。使用@array.sort.reverse
的成本是额外的数组重复加上反向(n / 2个元素切换)。所以,是的,我认为如果您认为阅读更清楚,那应该是可以接受的。
有关详细信息,请参阅其source。而且,我认为使用@array.sort.reverse
确实提供了“略微”更好的可读性(但是它不是很难以任何方式阅读)。
答案 1 :(得分:3)
我不确定这是否比Wayne Conrad自我描述的“明显的垃圾”更好,但你可以将Enumerable#sort_by_descending
定义为
Enumerable.class_eval do
def sort_by_descending(&block)
sort { |a, b| block.bind(b).call <=> block.bind(a).call }
end
end
然后按如下方式调用:
@songs.sort_by_descending(&:title)