2017-08-08 32 views
0

我聽說散列中鍵值對的位置不固定,可以重新排列。Ruby中的鍵/值對在散列中的位置(或任何語言)

我想知道這是否屬實,如果是這樣,有人可以指點我一些文檔嗎?如果它是錯誤的,那麼有一些相反的文檔會很棒。

爲了說明這一點,如果我有以下散列:

NUMBERS = { 
      1000 => "M", 
      900 => "CM", 
      500 => "D", 
      400 => "CD", 
      100 => "C", 
      90 => "XC", 
      50 => "L", 
      40 => "XL", 
      10 => "X", 
      9 => "IX", 
      5 => "V", 
      4 => "IV", 
      1 => "I", 
      } 

,並通過它遍歷了一遍又一遍,將第一個鍵/值對可能不會是1000 => 'M'?或者,鍵/值對的位置是否由定義確定,並且必須手動更改才能更改位置?

這個問題是關於哈希的質量的一個更普遍和最基本的問題。我不問如何在哈希中達到某個位置。

+0

的可能的複製[如何通過紅寶石位置獲得哈希值?(https://stackoverflow.com/questions/12155383/how-to-get-hash-values-by-position-in-ruby) –

+1

不要以爲它是重複的^問題,但可能是這個副本https://stackoverflow.com /問題/ 31418673 /是階的-A-紅寶石散列字面保證 –

回答

2

一般散列(或字典,關聯數組等)被視爲無序的數據結構。

Wikipedia

此外,關聯數組還可以包括其他一些操作, 作爲確定綁定的數量或以上所有綁定構建一個迭代 循環。通常,對於這樣的操作,返回綁定的訂單 可以是任意的。

但是,從Ruby 1.9開始,哈希鍵保持它們在Ruby中的插入順序。

答案是正確的在Ruby documentation for Hash

哈希的頂部枚舉在相應的鍵 插入的順序的值。

在Ruby可以很容易地測試它自己

key_indices = { 
    1000 => 0, 
    900 => 1, 
    500 => 2, 
    400 => 3, 
    100 => 4, 
    90 => 5, 
    50 => 6, 
    40 => 7, 
    10 => 8, 
    9 => 9, 
    5 => 10, 
    4 => 11, 
    1 => 12 
} 

1_000_000.times do 
    key_indices.each_with_index do |key_val, i| 
    raise if key_val.last != i 
    end 
end 
相關問題