- 1. Hash の sort メソッドは Array を返す
- 2. Hash を返すには
1. Hash の sort メソッドは Array を返す
これは、実はまだよく理解できていないんです(2018年10月31日)。
(これについて書かれたサイトがあったのですが、リンク切れになりました)
hash1 = { :hoge => 'fuga', :foo => 'bar' }
hash2 = hash1.sort
hash1.each do | key, value |
puts("#{__LINE__} キー[#{key}] 値[#{value}]")
end
puts
hash2.each do | key, value |
puts("#{__LINE__} キー[#{key}] 値[#{value}]")
end
puts
puts("#{__LINE__} #{hash1}")
puts("#{__LINE__} #{hash2}")
上記のソースを実行すると
5 キー[hoge] 値[fuga]
5 キー[foo] 値[bar]
10 キー[foo] 値[bar]
10 キー[hoge] 値[fuga]
14 {:hoge=>"fuga", :foo=>"bar"}
15 [[:foo, "bar"], [:hoge, "fuga"]]
とまぁ、5、10行目の出力結果を見るだけだと、単純に順番が入れ替わっているだけのように見えますが。
14、15行目の出力を見比べると違うものだということがなんとなくわかります。
2. Hash を返すには
では同じ Hash の形式にするには、下記のようにコーディングします。
hash1 = { :hoge => 'fuga', :foo => 'bar' }
hash2 = Hash[hash1.sort]
hash1.each do | key, value |
puts("#{__LINE__} キー[#{key}] 値[#{value}]")
end
puts
hash2.each do | key, value |
puts("#{__LINE__} キー[#{key}] 値[#{value}]")
end
puts
puts("#{__LINE__} #{hash1}")
puts("#{__LINE__} #{hash2}")
上記のソースを実行すると
5 キー[hoge] 値[fuga]
5 キー[foo] 値[bar]
10 キー[foo] 値[bar]
10 キー[hoge] 値[fuga]
14 {:hoge=>"fuga", :foo=>"bar"}
15 {:foo=>"bar", :hoge=>"fuga"}
同じ型のものの中身の順番が入れ替わっているのがわかります。
|