Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 按降序对可枚举项排序_Ruby_Enumerable - Fatal编程技术网

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)