7

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

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

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

4

2 回答 2

5

的表现Array.reverse不是很差。使用的成本@array.sort.reverse是额外的数组复制加上反向(n/2 元素开关)。所以是的,我认为如果你认为它读得更清楚,那应该是可以接受的。

有关详细信息,请参阅其来源。而且,我认为 using@array.sort.reverse确实提供了“稍微”更好的可读性(但以任何方式阅读都不是很难)。

于 2010-01-27T00:01:12.890 回答
3

我不确定这是否比韦恩康拉德自我描述的“明显的垃圾”更好,但你可以定义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)
于 2010-01-27T13:10:56.897 回答