使用另一个数组对数组进行排序

时间:2014-07-24 01:31:01

标签: ruby arrays sorting

我一直在寻找一种使用另一个数组对数组进行排序的方法。 Here是一个对我有用的答案:

  • order_array(我想要的奇怪顺序的id数组):a1 = [34, 54, 12, 43]
  • 对象列表(我想订购):a2 = [ {id: 54, name: "greg"}, {...}, {...}, {...} ]
  • a2.sort_by{|x| a1.index x.id}

这段小代码发生了什么?

1 个答案:

答案 0 :(得分:2)

这里发生的是sort_by使用您传递给它的块将数组映射到可排序元素。这样,可以使用<=>方法比较元素。所有可比对象必须实现此方法,在本例中为整数。

sort使用排序算法(可能不是冒泡排序,将块的返回值作为要排序的值。

所以,这个表达式:

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

...会产生与跑步相同的结果:

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

...其中x.index(x.id)返回a1数组中当前元素的id属性的索引。