2012-03-08 16 views
10

Mam problem z ustaleniem, w jaki sposób mogę posortować tablicę tablicy. Obie tablice są proste i jestem pewien, że to całkiem proste, ale nie mogę tego zrozumieć.Tablica sortowania ruby ​​tablicy

Oto tablica:

[["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 

chcę sortować je przez wartość całkowitą wewnętrznej tablicy, która jest wartością, ile razy wystąpiło słowo, największą liczbę pierwszą.

Odpowiedz

27

Spróbuj albo:

array = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 
sorted = array.sort {|a,b| a[1] <=> b[1]} 

Lub:

array = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 
sorted = array.sort {|a,b| b[1] <=> a[1]} 

zależności jeśli chcesz rosnąco lub malejąco.

1

Stosując metodę Array # sortowania:

ary = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 
ary.sort { |a, b| b[1] <=> a[1] } 
1

ten powinien robić, co chcesz.

a = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 
a.sort {|x,y| y[1] <=> x[1]} 
2

sort może być używany z blokiem.

a = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 
a.sort { |o1, o2| o1[1] <=> o2[1] } 
#=> [["happy", 1], ["mad", 1], ["sad", 2], ["bad", 3], ["glad", 12]] 
+4

Powinieneś zawsze używać "sort_by" do sortowania z kluczem. Nie tylko jest to * znacznie łatwiejsze * czytanie, ale także jest bardziej wydajne. W tym przypadku będzie to "a.sort_by {| el | el [1]} ', które w tym przypadku jest takie samo jak' a.sort_by (&: last) '. –

+1

Jak możemy tego użyć a.sort_by {| el | el [1]} jeśli chcemy zamówić malejące? –

+0

@ Vini.g.fer a.sort_by {| el | el [1] * -1} jeśli el [1] jest liczbą – Abel

Powiązane problemy