2014-09-05 89 views
0

我有散列例如如何獲得下一個值散列

{ 1 => 5, 3 => 6, 5 => 5, 8 => 10, 11 => 11} 

,我有一個關鍵的 - 5,我需要得到哈希與接下來的三個鍵值。在這種情況下結果將是:

{ 8 => 10, 11 => 11, 1 => 5} 

我該怎麼做?

+0

什麼數據結構是在這種情況下更好? – user1531875 2014-09-05 10:33:08

回答

0

你不能。

Ruby哈希是無序的。沒有可靠的「下一個」鍵/值。

+1

碰巧,它們被定購。但這是實施細節。 – 2014-09-05 10:15:58

1

這不是散列表的常用用例。整個問題的關鍵是能夠有效地查找特定的鍵,而不是按順序遍歷鍵。

如果你想這樣做,你需要選擇另一個數據結構,而不是散列或旁邊的散列(如果你仍然希望有效查找)。例如,如果您知道它們是整數鍵,那麼您可以測試後續的鍵是否存在,直到找到三個鍵,但效率非常低,如果當前鍵是第二高的,那麼尤其是。你會更好地維護一個不同的數據結構。

+0

在這種情況下哪種數據結構更好? – user1531875 2014-09-05 10:27:44

0

正如其他人所說的,你不能得到'下一對'值。如果你專門爲數字有序對,其中鍵是所有的數字看,你可以做這樣的事情:

h = { 1 => 5, 3 => 6, 5 => 5, 8 => 10, 11 => 11} 
sorted_keys = h.keys.sort 

sorted_keys.each do |key| 
    p "#{key} = #{h[key]}" 
end 

返回:

"1 = 5" 
"3 = 6" 
"5 = 5" 
"8 = 10" 
"11 = 11"