2017-05-10 115 views
-3

下面开始,结果都是一样的:排序不同顺序

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

我想知道发生了内部以及它如何取决于输入阵列上。

+0

您发布的两行代码排序了同一数组元素的两个不同排列。他们**必须**产生相同的结果(根据您的排序规则对值进行排序)。 – axiac

+0

@axiac你能解释一下排序块如何评估。我认为这取决于输入数组 – pramod

+0

如果他们给出不同的结果,排序的目的是什么? – sawa

回答

3

第一行:

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

调用与a = 3b = 5块。它返回5 <=> 3的结果,即1。大于0的整数告诉sorta跟在b之后。结果是[5, 3]


第二行:

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

调用与a = 5b = 3块。它返回3 <=> 5的结果,即-1。小于0的整数告诉sortb跟在a之后。结果是(再次)[5, 3]

+0

这让我很清楚:) – pramod

1

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

这是排序的最后一点 - 尽管初始数组排序顺序得到排序的结果。

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

+0

这对我有意义,能否请你解释块如何评估。我认为这取决于输入数组。 – pramod

+0

@pramod [请参阅此主题](http://stackoverflow.com/questions/2637419/how-does-arraysort-work-when-a-block-is-passed)上的'排序'与块说明。它不依赖于“输入数组”:) –

1

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

如果你想用相反的顺序排序写

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