このRubyコードは期待どおりに動作しません:
# create an array of hashes
sort_me = []
sort_me.Push({"value"=>1, "name"=>"a"})
sort_me.Push({"value"=>3, "name"=>"c"})
sort_me.Push({"value"=>2, "name"=>"b"})
# sort
sort_me.sort_by { |k| k["value"]}
# same order as above!
puts sort_me
ハッシュの配列をキー「値」でソートしようとしていますが、ソートされずに印刷されます。
Rubyのsort
はインプレースでソートされません。 (Python背景、おそらく?)
Rubyには、インプレースソート用のsort!
がありますが、sort_by
のインプレースバリアントはありません。実際には、次のことができます。
sorted = sort_me.sort_by { |k| k["value"] }
puts sorted
@shteefによるが、sort!
提案されたバリアント:
sort_me.sort! { |x, y| x["value"] <=> y["value"] }
Rubyにはsort_by
インプレースバリアントはありませんが、次のことができます:
sort_me = sort_me.sort_by { |k| k["value"] }
Array.sort_by!
は1.9.2で追加されました
sort_me.sort_by!{ |k| k["value"]}
を使用できます。これは動作するはずです。