2013-01-01 11 views
19

Właśnie zacząłem uczyć się ruby. Mam szereg skrótów. Chcę móc sortować tablicę na podstawie elementu w haśle. Myślę, że powinienem móc użyć metody sort_by. Czy ktoś może ci pomóc?Metoda ruby ​​sort_by

#array of hashes 
array = [] 
hash1 = {:name => "john", :age => 23} 
hash2 = {:name => "tom", :age => 45} 
hash3 = {:name => "adam", :age => 3} 
array.push(hash1, hash2, hash3) 
puts(array) 

Oto mój kod sort_by:

# sort by name 
array.sort_by do |item| 
    item[:name] 
end 
puts(array) 

Nic nie dzieje się do tablicy. Nie ma również błędu.

Odpowiedz

37

Musisz zapisać wynik:

res = array.sort_by do |item| 
    item[:name] 
end 
puts res 

lub zmodyfikować tablicę sam:

array.sort_by! do |item| #note the exclamation mark 
    item[:name] 
end 
puts array 
+0

dziękuję. Po prostu też zorientowałem się. Widziałem inny sort_by przykład. Tak więc sort_by nie działa w miejscu. –

+5

Metody Bang (te kończące się z!) Modyfikują się, ale dobrze jest nie używać ich i tworzyć nowe obiekty jako zmodyfikowane wersje starych. Subtelne błędy można wprowadzać do programów, umożliwiając mutację obiektów. – quandrum

+0

Dziękuję za wgląd. –

Powiązane problemy