開発版では登録された要素の順序が記憶されるように
最新の開発版のRubyでは、ハッシュは登録した順序を記憶するようになりました。
次のような処理を試してみると、登録した順序の通り処理が行われていることが確認できます。
# ruby 1.9.0 (2007-12-13 patchlevel 0) [i686-linux] a = { "tomato" => 120, "potato" => 50, "carrot" => 30, } p a #=> {"tomato"=>120, "potato"=>50, "carrot"=>30} a.keys #=> ["tomato", "potato", "carrot"] a.values #=> [120, 50, 30] a.each do |key, value| puts "#{key}の値段は、#{value}円です。" end #=> tomatoの値段は、120円です。 potatoの値段は、50円です。 carrotの値段は、30円です。
ちなみにruby 1.8.5では、次のような結果となり、順序は保存されません。
# ruby 1.8.5 (2007-06-07 patchlevel 52) [i686-linux] a = { "tomato" => 120, "potato" => 50, "carrot" => 30, } p a #=> {"carrot"=>30, "potato"=>50, "tomato"=>120} a.keys #=> ["carrot", "potato", "tomato"] a.values #=> [30, 50, 120]
個人的には、最新版のように順序を記憶してくれる仕様が正式に採用されることを祈っています。