Arrays 从不同的顺序开始排序

Arrays 从不同的顺序开始排序,arrays,ruby,sorting,Arrays,Ruby,Sorting,在以下情况中,结果是相同的: [3, 5].sort{|a, b| b <=> a} [5, 3].sort{|a, b| b <=> a} 我想知道内部发生了什么,以及它如何依赖于输入数组。因为您正在对数组进行排序,而更改数组的元素顺序不会更改排序结果 这就是排序的全部要点——不管初始数组排序如何,都要获得排序结果 要更改结果,您需要更改排序规则,而不是数组。无论输入顺序如何,输出都是相同的,因为您要对数组进行排序 如果要按相反的顺序排序,请编写 [3,5].sort

在以下情况中,结果是相同的:

[3, 5].sort{|a, b| b <=> a}
[5, 3].sort{|a, b| b <=> a}

我想知道内部发生了什么,以及它如何依赖于输入数组。

因为您正在对数组进行排序,而更改数组的元素顺序不会更改排序结果

这就是排序的全部要点——不管初始数组排序如何,都要获得排序结果


要更改结果,您需要更改排序规则,而不是数组。

无论输入顺序如何,输出都是相同的,因为您要对数组进行排序

如果要按相反的顺序排序,请编写

[3,5].sort{|a,b| a <=> b}
第一行:

[3, 5].sort { |a, b| b <=> a }

调用a=5和b=3的块。它返回35的结果,即-1。小于0的整数告诉sort b跟在a后面。因此,结果还是[5,3]。

您发布的两行代码对同一数组中元素的两种不同排列进行排序。它们必须产生相同的结果。请根据排序规则对值进行排序。@axiac您能解释一下排序块的计算方法吗。我认为这取决于输入数组如果它们给出不同的结果,排序的目的是什么?@pramod当然这取决于输入数组,但的目的是返回一个数组,该数组按指定顺序包含与输入数组相同的值。在这种情况下,只要使用相同的排序规则b a,排序就必须始终返回相同的结果,无论输入数组中值的顺序如何。这是Arraysort存在的唯一原因。@axiac:事实上,Enumerablesort和Enumerablesort__by不稳定,因此事实上不能保证结果总是相同的。事实上,对于相同的输入,它甚至不能保证是相同的。这对我来说是有意义的,你能解释一下块是如何计算的吗。我认为这取决于输入数组。@pramod取决于带块解释的排序。它不依赖于输入数组:
[5, 3].sort { |a, b| b <=> a }