2014-07-24 131 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数组。

相关问题