2011-09-13 62 views
0

根據ruby-doc:「哈希枚舉它們的值的順序是相應的鍵被插入。」使用散列索引

這是否意味着散列確實像數組一樣排序,這樣我就可以指望my_hash.keys和my_hash.values和my_hash.to_a的索引始終排隊?

例如是這樣的一個好主意或壞主意?

my_hash = {"a"=>"alpha", "b"=>"beta", "c"=>"gamma"} 

some_letters.each { |letter| 
    if my_hash.has_key? letter then 
    imp_index = my_hash.keys.find_index 
    table.row[r].col[imp_index].value = my_hash.values[imp_index] 
    end 
} 

所以......我可以把一個項目在my_hash.keys隱式指數作爲一個明確的屬性?

編輯:也可以通過在循環之前緩存.keys和.values數組來保存任何時間嗎?

回答

1

哈希列舉它們的值的順序來相應的鍵分別插入

只有在紅寶石1.9。在之前的版本中,哈希是無序的。

這是否意味着我可以指望my_hash.keys和my_hash.values和my_hash.to_a的索引始終排隊?

是的,只要對相同的未修改的散列進行兩次迭代即可按相同的順序進行迭代。 (即使散列無序)