Ruby - トラブルシュート - Hash の sort メソッドは Array を返す

クラウディア 
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"}
 同じ型のものの中身の順番が入れ替わっているのがわかります。