Enumerable
按降序排序的最佳方法是什么?
我一直在做@array.sort.reverse
或@array.sort_by{|song| song.title }.reverse
我想我可以做类似的事情@array.sort{|a, b| b.title <=> a.title}
,但我发现这很难阅读和冗长。
Enumerable
按降序排序的最佳方法是什么?
我一直在做@array.sort.reverse
或@array.sort_by{|song| song.title }.reverse
我想我可以做类似的事情@array.sort{|a, b| b.title <=> a.title}
,但我发现这很难阅读和冗长。
的表现Array.reverse
不是很差。使用的成本@array.sort.reverse
是额外的数组复制加上反向(n/2 元素开关)。所以是的,我认为如果你认为它读得更清楚,那应该是可以接受的。
有关详细信息,请参阅其来源。而且,我认为 using@array.sort.reverse
确实提供了“稍微”更好的可读性(但以任何方式阅读都不是很难)。
我不确定这是否比韦恩康拉德自我描述的“明显的垃圾”更好,但你可以定义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)