web-dev-qa-db-ja.com

ハッシュの配列をハッシュの値でソートするにはどうすればよいですか?

この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

ハッシュの配列をキー「値」でソートしようとしていますが、ソートされずに印刷されます。

111
Ollie Glass

Rubyのsortはインプレースでソートされません。 (Python背景、おそらく?)

Rubyには、インプレースソート用のsort!がありますが、sort_byのインプレースバリアントはありません。実際には、次のことができます。

sorted = sort_me.sort_by { |k| k["value"] }
puts sorted
200
Stéphan Kochen

@shteefによるが、sort!提案されたバリアント:

sort_me.sort! { |x, y| x["value"] <=> y["value"] }
21
bjg

Rubyにはsort_byインプレースバリアントはありませんが、次のことができます:

sort_me = sort_me.sort_by { |k| k["value"] }

Array.sort_by!は1.9.2で追加されました

6
AG_

sort_me.sort_by!{ |k| k["value"]}を使用できます。これは動作するはずです。

2