4

これはかなり単純なようで、前に尋ねるべきでしたが、StackOverflowで見つけたものはすべて機能していないようです。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 に答える