爲什麼它可以算作?
任何哈希將有一個「自然排序」。
「自然排序」既可以在每個元素被插入時執行,也可以在第一次搜索之前執行。
如果沒有自然排序返回匹配特定鍵的值將需要詳盡的搜索。
的窮舉搜索,當然,將取n的比較,其中n是在哈希元素的數量(例如:65536個元件65536點的比較檢索。)
在另一方面,如果散列進行排序按KEY按字母順序排列,則二進制搜索可以在LOG2(n)比較中找到匹配項。 (例如在16個比較中搜索65536個元素)。
還有其他的排序方法,但它們都需要一些初始排序。這種排序可能是一個帶有隱藏索引的系統,它將鍵/值對元素排序。
例如在下面的部分實現中,鍵/值對作爲對象存儲在底層數組中。
myArray[0] = {"b", "Skies"}
myArray[1] = {"c", "dog"}
myArray[2] = {"a", "Jax"}
myArray[3] = {"d", "gone"}
myArray[4] = {"r", "run"}
myArray[5] = {"q", "quit"}
的第二陣列中,向其中紅寶石顯影劑沒有訪問,保持排序。
sortArray[0] = 2
sortArray[1] = 0
sortArray[2] = 1
sortArray[3] = 3
sortArray[4] = 4
sortArray[5] = 5
因此,內部到哈希對象
for(i=0 to 5)
print myArray[sortArray[i]]
將打印的排序後的數組。
Ruby的規範顯然沒有指定使用哪種方法,按鍵排序,隱藏排序或其他方法,因此,不,您不能指望自然排序。
你打印出你的散列?你打電話來檢查嗎? – 2010-08-18 20:07:11
*我們在這裏談論什麼* Ruby? MRI 1.8? MRI 1.9? JRuby的? Rubinius的? MacRuby的?像這樣的實現細節必然因實現而異。 – Chuck 2010-08-18 20:08:38
我正在使用'each_pair do | k,v |'請參閱上面的更新 – 2010-08-18 20:48:52