2017-05-10 159 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}