2013-07-24 13 views
5

私は配列ary = [0.0, 1.0, 5.0, 1.0, -2.0, 3.5]を持っていて、aryのインデックスをソート順に並べた同じサイズの別の配列を出力として出力したいとします。つまり、出力は[4,0,1,3,5,2]である必要があります。 EnumerableまたはArrayでこれを行う効率的な方法はありますか?Rubyで並べ替えられた配列のインデックスを取得しますか?

次のように、私が想像できる最も自明な解は次のようになります。

class Array 
    def sorted_indices 
    self.map.with_index{ |v,i| [v,i] }.sort{ |a,b| a[0] <=> b[0] }.map { |v| v[1] } 
    end 
end 

をすでに内蔵のシンプルな何かがなければならないような気がし

配列の値ということに注意することが重要ですユニークではありません。結果配列に何度もインデックスが表示されません(つまり、[4,0,1,1,5,2]は正しくありません)。

答えて

6
ary.each_index.sort_by{|i| ary[i]} 
# => [4, 0, 1, 3, 5, 2] 
+0

速いです。ありがとう! –

+2

「to_a」を削除することができます。 :) – Santhosh

関連する問題