2013-07-24 10 views
5

Załóżmy, że mam tablicę ary = [0.0, 1.0, 5.0, 1.0, -2.0, 3.5] i chcę jako wyjściową kolejną tablicę o tym samym rozmiarze zawierającą indeksy ary w porządku posortowanym według wartości. Innymi słowy, wyjście powinno być [4,0,1,3,5,2]. Czy jest to skuteczny sposób z Enumerable lub Array?Pobierz indeksy dla posortowanej permutacji tablicy w Ruby?

Najbardziej banalne rozwiązanie mogę sobie wyobrazić, jest następująca:.

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 

ale czuję się jak tam musi być coś prostszego już wbudowane w

Ważne jest, aby pamiętać, że wartości w tablicy nie są wyjątkowe. Żaden indeks nie powinien pojawiać się w tablicy wyników więcej niż jeden raz (innymi słowy, [4,0,1,1,5,2] nie jest poprawny).

Odpowiedz

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

To było szybkie. Dzięki! –

+2

'to_a' można usunąć. :) – Santhosh

Powiązane problemy