我是新來的Ruby和有關的排序方法數組排序{| x,y | },x總是小一點?
例如很困惑:
person.sort{|x, y| x.age<=> y.age}
我知道,如果我將其更改爲y.age<=> x.age
,這將扭轉排序順序。
我閱讀本other question和他們都只能說x
和y
是從陣列的兩個元件,由sort
算法選擇。
但是x
總是較小的對象?我的意思是,如果我把它寫成第一種方式,它會不會從最小的到最古老的?
感謝
我是新來的Ruby和有關的排序方法數組排序{| x,y | },x總是小一點?
例如很困惑:
person.sort{|x, y| x.age<=> y.age}
我知道,如果我將其更改爲y.age<=> x.age
,這將扭轉排序順序。
我閱讀本other question和他們都只能說x
和y
是從陣列的兩個元件,由sort
算法選擇。
但是x
總是較小的對象?我的意思是,如果我把它寫成第一種方式,它會不會從最小的到最古老的?
感謝
這是對正在發生的事情的簡化,不是 Ruby使用的排序算法(希望),但它可能有助於理解發生了什麼。
比方說,你有這個數組要排序年齡:
[15, 25, 12]
現在排序算法開始經歷的陣列,以確定正確的順序。首先,它採前兩個元素並對它們進行比較:
|15, 25| 15 <=> 25
結果是-1,所以現在它知道15應該被排序它需要之前25.
下一頁25和12
|25, 12| 25 <=> 12
結果是1.12應該在25之前排序。
現在我們知道,25應該在每隔一個元素之後排序。我們只需要知道訂單15和12
之間
|15, 12| 15 <=> 12
結果是1,那麼12應15。現在最後的排序被稱爲前進行排序:
[12, 15, 25]
正如你看到的,比較算法被多次調用。 x
和y
|x, y|
是傳遞給比較方法的數組元素的佔位符。
非常感謝。我從來沒有想過它實際上跑了好幾次 – hrsetyono 2013-03-23 07:13:58
這裏有一個方法,你可以回答自己這個問題,用reductio ad absurdum一種形式:如果x
是總是較小的對象?如果是這樣的話,那麼你就不需要費心去比較它與y
,你會嗎?你可以只寫:
person.sort { |x, y| 1 }
或者,也許我有倒退,你可以只寫:
person.sort { |x, y| -1 }
但無論哪種方式,這是一種荒謬的,不是嗎?當然,如果你嘗試它,它將無法正常工作。
因此,這告訴我們在這種塊的主體中,我們不知道x
還是y
是較小的對象。實際上,x
和y
可以是來自person
陣列的任意兩個任意元素。這就是我們必須寫出比較的全部原因。
這是否有助於澄清它,還是我誤解了你的問題?
哈哈是啊,那些答案是好的,但他們都沒有說明是否'x'是較小或較大 – hrsetyono 2013-03-23 06:50:04
但我不明白爲什麼接受的答案在副本中也不回答這個問題。你熟悉'<=>'運營商嗎? – JJJ 2013-03-23 06:50:04
從我在這個問題中讀到的內容來看,如果'x
hrsetyono
2013-03-23 06:54:42