2013-09-30 131 views
1

我在生產服務器上使用紅寶石1.8.7和我的散列會自動得到排序,而分配給它的變量。並在本地機器工作正常。紅寶石哈希默認情況下得到排序在紅寶石1.8.7

這是輸出從我的生產控制檯

>> a = {"b" => "a", "a" => "c"} 

=> {"a"=>"c", "b"=>"a"} 

>> a 

=> {"a"=>"c", "b"=>"a"} 
>> 

採取有什麼想法?我如何避免排序哈希?

謝謝

+0

實際上,哈希未按默認排序,而是按照Ruby 1.8.7最方便的順序進行迭代。這種行爲在1.9+中改變,它按插入到散列的順序迭代鍵。你不能改變這一點,但可以在它重要的地方解決它(如果你的要求不是簡單地使用插入順序,而只是一個明確定義的順序) –

回答

5

你不應該/不能。如果您的腳本依賴於某種特定的順序,那麼您很可能想使用鍵/值對列表來代替。在1.8中使用散列時,規範中未定義順序。當使用1.9時,它被定義爲按插入順序枚舉。

0

Hash in 1.8.7 is not ordered,意思是你不能依賴鍵值對的順序。你看到他們按字母順序排序是一個巧合。

如果您需要知道鍵/值對的順序,可以使用ActiveSupport::OrderedHash(或升級到Ruby 1.9+並使用內置的Hash)。