概要
Hash#sort_by
詳細
Hashの内容をブロックの内容でソートする
サンプルコード
# encoding: utf-8 require 'tbpgr_utils' require 'attributes_initializable' h = { hoge_key1: '1', hoge_key2: '2', hige_key: '3', hage_key: '4', } class Hoge include AttributesInitializable attr_accessor_init :name, :age def to_hash { name: @name, age: @age, } end end hoges = { hoge3: Hoge.new({name: 'hoge3', age: 25}), hoge2: Hoge.new({name: 'hoge2', age: 26}), hoge1: Hoge.new({name: 'hoge1', age: 27}), } bulk_puts_eval binding, <<-EOS h.sort_by {|k, v|k} h.sort_by {|k, v|v} hoges.sort_by {|k, v|k} hoges.sort_by {|k, v|v.name} hoges.sort_by {|k, v|v.age} EOS __END__ 下記はTbpgrUtils gemの機能 bulk_puts_eval attr_accessor_init https://rubygems.org/gems/tbpgr_utils https://github.com/tbpgr/tbpgr_utils
出力
h.sort_by {|k, v|k} # => [[:hage_key, "4"], [:hige_key, "3"], [:hoge_key1, "1"], [:hoge_key2, "2"]] h.sort_by {|k, v|v} # => [[:hoge_key1, "1"], [:hoge_key2, "2"], [:hige_key, "3"], [:hage_key, "4"]] hoges.sort_by {|k, v|k} # => [[:hoge1, #<Hoge:0x2d41ef8 @name="hoge1", @age=27>], [:hoge2, #<Hoge:0x2d41fa0 @name="hoge2", @age=26>], [:hoge3, #<Hoge:0x2d4c080 @name="hoge3", @age=25>]] hoges.sort_by {|k, v|v.name} # => [[:hoge1, #<Hoge:0x2d41ef8 @name="hoge1", @age=27>], [:hoge2, #<Hoge:0x2d41fa0 @name="hoge2", @age=26>], [:hoge3, #<Hoge:0x2d4c080 @name="hoge3", @age=25>]] hoges.sort_by {|k, v|v.age} # => [[:hoge3, #<Hoge:0x2d4c080 @name="hoge3", @age=25>], [:hoge2, #<Hoge:0x2d41fa0 @name="hoge2", @age=26>], [:hoge1, #<Hoge:0x2d41ef8 @name="hoge1", @age=27>]]