2013-01-01 10 views
19

私はちょうどルビーを学び始めました。私はハッシュの配列を持っています。私はハッシュの要素に基づいて配列をソートできるようにしたい。私はsort_byメソッドを使用できるはずだと思います。誰か助けてもらえますか?ここで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) 

は私のsort_byコードです:

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

何も配列に起こりません。どちらもエラーはありません。

答えて

37

あなたは結果を格納する必要があります。

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

または配列自体を変更します。

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

ありがとうございました。私も同じことを考え出しただけです。 another sort_byの例を見ました。だからsort_byはインプレースをしません。 –

+5

Bangメソッド(!で終わるもの)はその場で修正されますが、それらを使用せず、新しいオブジェクトを古いものの修正バージョンとして作成することをお勧めします。メソッドがオブジェクトを突然変異させるようにすることで、微妙なバグをプログラムに導入することができます。 – quandrum

+0

洞察をいただきありがとうございます。 –

関連する問題