2012-10-04 63 views
1

我是一個紅寶石新手,並嘗試了一些小東西。所以這就是我所做的。無法理解紅寶石如何打印此散列

  1. 我使用內部評級法,並在其中我創建了一個簡單的哈希sampleHash = {"One" => 1, "Two" => 2, "Three" => 3}但是當它存儲(這說明你按下回車鍵後),這是我得到=> {"One"=>1, "Three"=>3, "Two"=>2}。此外,當我把它打印出來是這樣的:sampleHash.each do|count, num| print "#{count}: #{num} \n" end我得到這個作爲輸出:

    One: 1 
    Three: 3 
    Two: 2 
    
  2. 現在,我嘗試使用編輯器,這是我寫的:

    hashExample = {"One" => 1, 
           "Two" => 2, 
           "Three" => 3 } 
    hashExample.each do|count, num| 
        print "#{count}: #{num} \n" 
    end 
    

    我得到這個作爲輸出:

    Three: 3 
    Two: 2 
    One: 1 
    

它是如何存儲keysvalues ?爲什麼它以不同的方式打印?我在這裏錯過了什麼?

回答

3

在Ruby 1.9之前的哈希是無序的。也就是說,將密鑰插入散列的順序與迭代散列時出現的順序無關。

沒有辦法通過內置哈希來修復這個問題,但沒有升級到Ruby 1.9。如果您需要一個維護其密鑰順序的哈希,您可以使用ActiveSupport::OrderedHash

+0

是的,它在1.8和1.9上表現不同。看到區別[here](http://cibox.org/slivu/stackoverflow?lang=ruby&file=hash.rb&versions=1.8.7-p370+1.9.3-p194)(點擊運行以查看結果) – 2012-10-04 21:16:51