2010-01-27 18 views
7

Załóżmy, że mamSortowanie tablicy przez dwóch wartości

an_array = [[2, 3], [1, 4], [1, 3], [2, 1], [1, 2]] 

Chcę uporządkować tę tablicę według pierwszej wartości każdej wewnętrznej tablicy, a następnie przez drugi (tak posortowanej tablicy powinna wyglądać następująco: [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3]])

Jaki jest najbardziej czytelny sposób na zrobienie tego?

Odpowiedz

13

Jest to zachowanie domyślne do sortowania tablic (patrz definicja Array#<=> metoda dla dowodu). Trzeba po prostu być w stanie to zrobić:

an_array.sort 
1

an_array.sort

8

Jeśli chcesz trochę innych niż domyślne zachowanie, zbadać sort_by (rubin 1.8.7+)

np Sortuj według drugiego elementu następnie przez pierwszy

a.sort_by {|e| [e[1], e[0]]} # => [[2, 1], [1, 2], [1, 3], [2, 3], [1, 4]] 

lub sortowania przez pierwszy element rosnącej, a następnie drugi element malejąco

a.sort_by {|e| [e[0], -e[1]]} # => [[1, 4], [1, 3], [1, 2], [2, 3], [2, 1]] 
+0

@glenn Jackman: wielki odpowiedź !!! właśnie tego szukałem. Dziękuję Ci – Radek

Powiązane problemy