我有兩個數組:如何以相同的方式對兩個數組進行排序?
a = [6, 4, 3]
b = [1, 3, 4]
我打電話a.sort
:
a.sort = [3, 4, 6]
我怎麼排序陣列b
所以值具有排序之前相同的位置值陣列a
?
這將是現在:
b = [4, 3, 1]
因此,在b
值在陣列a
同一位置值。
我有兩個數組:如何以相同的方式對兩個數組進行排序?
a = [6, 4, 3]
b = [1, 3, 4]
我打電話a.sort
:
a.sort = [3, 4, 6]
我怎麼排序陣列b
所以值具有排序之前相同的位置值陣列a
?
這將是現在:
b = [4, 3, 1]
因此,在b
值在陣列a
同一位置值。
你可以使用zip
方法既陣列組合成一個。一旦你把A和B,你會得到,
[[6, 1], [4, 3], [3, 4]]
現在陣列,這將根據導致每個子陣列的第一個元素進行排序分類,
[[3, 4], [4, 3], [6, 1]]
現在,我們希望做zip的反轉以獲得每個子數組的第一個和第二個元素到一個新的數組中。使用transpose
,我們可以得到它放回原來的形式,
[[3, 4, 6], [4, 3, 1]]
值得慶幸的是使用並行分配這一切都是可能的一條線。下面是完整的代碼,
x, y = a.zip(b).sort.transpose
現在x
應該包含[3, 4, 6]
和y
應該包含[4, 3, 1]
。
不錯!很好的使用#zip。 – DigitalRoss 2011-12-27 19:57:27
剛剛使用了a,b而不是x,y – 2011-12-27 20:05:03
我不知道你在努力達到什麼目的,我相信其他人可以想出一個更優雅的解決方案,但我會使用哈希代替。將a
的值指定爲鍵值,將b
的值指定爲值。您可以迭代一次來完成此操作,或者在創建此數據時提前完成。結果應該是:
$ hash
=> {6 => 1, 4 => 3, 3 => 4}
a0 b0 a1 b1 a2 b2
$ hash.sort
=> [[3, 4], [4, 3], [6, 1]]
就像我說的,不是超光滑,但我有火雞解酒...
[a, b].transpose.sort { |x, y| x[0] <=> y[0] }.transpose[1]
=> [4, 3, 1]
或
a, b = [a, b].transpose.sort { |x, y| x[0] <=> y[0] }.transpose
您應該總是使用'sort_by'來進行鍵控排序。它不僅更具可讀性,而且更高效。 – 2011-12-28 01:18:42
a = [6, 4, 3]
b = [1, 3, 4]
ra, rb = a.zip(b).sort_by(&:first).transpose
# ra => [3, 4, 6]
# rb => [4, 3, 1]
什麼是您的排序方法?你寫的東西,還是你使用的圖書館? – Didaxis 2011-12-27 19:40:22
我只是在我的Rails控制檯中調用.sort認爲它使用Comparable – 2011-12-27 19:41:31
您希望'b'在排序前具有與'a'相同的排序邏輯嗎? – 2011-12-27 19:51:18