Ruby:基于整数数组对对象数组进行排序

时间:2012-12-13 22:40:44

标签: ruby arrays sorting

这看起来很简单,之前应该问过,但我在Stack Overflow上找到的一切似乎都不起作用。我有一个包含4个对象的数组,我想按特定顺序重新排序。所以,它看起来像这样:

array = [Obj1, Obj2, Obj3, Obj4]

我有另一个整数数组,表示索引的所需顺序:

desired_order = [2,3,0,1]

所以我想在正确订购array之后看到的是:

array = [Obj3, Obj4, Obj1, Obj2]

我已经认为sort_by是要使用的方法,但我似乎无法提出正确的语法。非常感谢任何帮助!

3 个答案:

答案 0 :(得分:7)

Array#values_at完全符合您的要求:

array.values_at(*desired_order)

答案 1 :(得分:5)

desired_order.map{|i| array[i]}

答案 2 :(得分:1)

如果您已经有索引,那么您只需将它们映射到对象:

array = %w[obj1 obj2 obj3 obj4]
desired_order = [2,3,0,1]

desired_order.map{|idx| array[idx]} # => ["obj3", "obj4", "obj1", "obj2"]