2014-07-24 132 views
1

我正在尋找一種使用另一個數組對數組進行排序的方法。 Here是爲我工作的答案:使用另一個數組對數組進行排序

  • 的order_array(IDS的一個奇怪的命令,我想一個數組):a1 = [34, 54, 12, 43]
  • 對象列表(即我要訂購):a2 = [ {id: 54, name: "greg"}, {...}, {...}, {...} ]
  • a2.sort_by{|x| a1.index x.id}

這段小小的代碼是怎麼回事?

+2

'a1.index(x.id)'返回'a1'數組中'x'的位置。 'sort_by'使用該信息對'a2'數組進行排序。 – jvnill

+0

ahhh ... so, a1.index(x.id)表示我們正在爲每個id分配索引值 有點像[3,5,2,6] .index(2)會給我'2'作爲答案。然後從那裏我們只是按這些索引值進行排序,這當然會是0,1,2,3,4,5等! – rikkitikkitumbo

回答

2

這裏發生的是sort_by使用您傳遞給它的塊來將數組映射到可排序的元素。這樣可以使用<=>方法比較這些元素。所有可比較的對象都必須實現此方法,在這種情況下爲整數。

sort使用排序算法(可能不是冒泡排序,取塊的返回值作爲值進行排序

所以,這個表達式:

a2.sort_by { |x| a1.index x.id } 

...將產生同樣的結果跑步:

a2.map { |x| a1.index x.id }.sort 

...其中x.index(x.id)返回當前元素的id屬性的索引中a1數組。

相關問題