1. ホーム
  2. ruby

[解決済み] ハッシュの配列をハッシュの値でソートするにはどうしたらいいですか?

2022-07-17 21:03:43

質問

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

私はキー "value" によってハッシュの配列をソートしたいのですが、それらはソートされていない状態で印刷されます。

どのように解決するのですか?

Rubyの sort はインプレースでソートしません。(もしかしたらPythonの素養があるのでしょうか?)

Rubyには sort! を実装しています。 sort_by に対するインプレースバリアントはありません。実際には、できます。

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

Ruby 1.9+の時点では .sort_by! はインプレースソートで利用可能です。

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