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

 
1. Hash の sort メソッドは Array を返す
2. Hash を返すには

1. Hash の sort メソッドは Array を返す

 これは、実はまだよく理解できていないんです(2018年10月31日)。  「sort (Enumerable) - Rubyリファレンス」に書かれてあるのですが・・・。
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"}
 同じ型のものの中身の順番が入れ替わっているのがわかります。