使用另一个数组对数组进行排序
问题描述:
我正在寻找一种使用另一个数组对数组进行排序的方法。 Here是为我工作的答案:使用另一个数组对数组进行排序
- 的order_array(IDS的一个奇怪的命令,我想一个数组):
a1 = [34, 54, 12, 43]
- 对象列表(即我要订购):
a2 = [ {id: 54, name: "greg"}, {...}, {...}, {...} ]
a2.sort_by{|x| a1.index x.id}
这段小小的代码是怎么回事?
答
这里发生的是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
数组。
'a1.index(x.id)'返回'a1'数组中'x'的位置。 'sort_by'使用该信息对'a2'数组进行排序。 – jvnill
ahhh ... so, a1.index(x.id)表示我们正在为每个id分配索引值 有点像[3,5,2,6] .index(2)会给我'2'作为答案。然后从那里我们只是按这些索引值进行排序,这当然会是0,1,2,3,4,5等! – rikkitikkitumbo