2013-01-01 13 views
19

Ho appena iniziato a imparare rubino. Ho una serie di hash. Voglio essere in grado di ordinare l'array basato su un elemento nell'hash. Penso che dovrei essere in grado di usare il metodo sort_by. Qualcuno può aiutarmi?ruby ​​sort_by method

#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) 

Ecco il mio codice sort_by:

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

Non succede nulla alla matrice. Non ci sono errori neanche.

risposta

37

dovete memorizzare il risultato:

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

o modificare la matrice stessa:

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

Grazie. Ho anche capito lo stesso. Ho visto un altro sort_by esempio. Quindi sort_by non funziona sul posto. –

+5

I metodi Bang (quelli che terminano con!) Si modificano, ma è buona norma non usarli e creare nuovi oggetti come versioni modificate di quelli vecchi. Piccoli bug possono essere introdotti nei tuoi programmi consentendo metodi per mutare i tuoi oggetti. – quandrum

+0

Grazie per l'intuizione. –