Ruby 按降序对可枚举项排序
按降序对可枚举的Ruby 按降序对可枚举项排序,ruby,enumerable,Ruby,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个元素开关)。所以,是的,我认为如果你认为它读得更清楚,这应该是可以
进行排序的最佳方法是什么
我一直在做@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个元素开关)。所以,是的,我认为如果你认为它读得更清楚,这应该是可以接受的
有关详细信息,请参阅。而且,我认为使用@array.sort.reverse
确实提供了“稍微”更好的可读性(但任何方式都不难阅读)。我不确定这是否比的自我描述的“明显的垃圾”更好,但您可以将可枚举的按降序排序定义为
Enumerable.class_eval do
def sort_by_descending(&block)
sort { |a, b| block.bind(b).call <=> block.bind(a).call }
end
end
我认为array.sort.reverse
很好。它简单明了,不应该太贵。为什么不使用#reverse?因为sort是O(n log n)
,reverse只是O(n)
,Peter的解决方案很好。sort.reverse并不比sort慢多少,而且比任何想象的都快。我在1000000个随机浮点数上对array.sort、array.sort.reverse和array.reverse_sort(我的猴子补丁解决方案,后来我将其删除为“一块明显的垃圾”)进行了基准测试,得到的时间分别为2.4、2.5和24.8秒。
@songs.sort_by_descending(&:title)