【发布时间】:2017-05-10 10:38:13
【问题描述】:
下面的结果是一样的:
[3, 5].sort{|a, b| b <=> a}
[5, 3].sort{|a, b| b <=> a}
我想知道内部发生了什么以及它如何依赖于输入数组。
【问题讨论】:
-
您发布的两行代码对同一数组的元素的两种不同排列进行排序。它们必须产生相同的结果(根据您的排序规则对值进行排序)。
-
@axiac 您能否解释一下排序块将如何评估。我认为这取决于输入数组
-
如果他们给出不同的结果,排序的目的是什么?
-
@pramod 当然它取决于输入数组,但
Array#sort()的目的是返回一个数组,该数组包含与指定顺序的输入数组相同的值。只要您使用相同的排序规则(在这种情况下为b <=> a),#sort()必须始终返回相同的结果,无论输入数组中值的顺序如何。这是Array#sort()存在的唯一原因。 -
@axiac:其实
Enumerable#sort和Enumerable#sort_by是不稳定的,所以事实上不保证结果总是一样的。实际上,对于相同的输入,甚至不能保证相同。