按降序对可枚举进行排序

时间:2010-01-26 20:49:35

标签: ruby enumerable

按降序对Enumerable进行排序的最佳方法是什么?

我一直在做@array.sort.reverse@array.sort_by{|song| song.title }.reverse

我想我可以做@array.sort{|a, b| b.title <=> a.title}这样的事情,但我发现这很难阅读和详细。

2 个答案:

答案 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)