4

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

array = [Obj1, Obj2, Obj3, Obj4]

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

desired_order = [2,3,0,1]

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

array = [Obj3, Obj4, Obj1, Obj2]

我已经想出sort_by了要使用的方法,但我似乎无法想出正确的语法。任何帮助是极大的赞赏!

4

3 回答 3

7

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

array.values_at(*desired_order)
于 2012-12-13T22:52:29.940 回答
5
desired_order.map{|i| array[i]}
于 2012-12-13T22:42:33.610 回答
1

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

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

desired_order.map{|idx| array[idx]} # => ["obj3", "obj4", "obj1", "obj2"]
于 2012-12-13T22:43:22.230 回答