2017-01-04 13 views
0

我有一組有序的鍵值對,例如帶有以下各項:一個有序字典在這裏很容易轉移到下一個關鍵

1 "one" 
2 "two" 
4 "four" 
50 "fifty" 

我想有一個快速查找(所以給出一個int密鑰,我想找到該密鑰的值),但理想情況下,還可以使用當前密鑰快速查找字典中的下一個密鑰 - 因此,給定密鑰2,發現下一個密鑰是4,然後50

我知道一個詞典快速地完成了第一個詞典,並且也像第二部分的鏈接列表一樣(但是很難'跳入'從一個特定的鍵開始)。

我已經看了here,它似乎有些可能與一個有序的字典?我想知道C#中是否有一個好的數據結構來完成這些事情(按鍵查找並移至下一個鍵)?

我不需要項目的數量非常大(可能在幾千個),但如果可能的話,我想要做大量的查找並快速在各個關鍵點之間向前移動(不檢查第5個, 6,7 ...出現在詞典中)。

+2

你可能想看看http://stackoverflow.com/questions/4720674/how-do-i-get-previous-key-from-sorteddictionary – Florian

+0

詞典已經有鍵的集合。所以你只需遍歷鍵。 'foreach(var key in dict.Keys)' –

+0

我建議如果像SortedDictionary或SortedList這樣的單數據類型沒有幫助,那麼將數據存儲在兩個單獨的結構中可能是最優的,並且可以互換地使用,取決於最優戰略。儘管如此,這會增加保持最新的成本。 @ M.kazemAkhgary我相信他的意思是優化只用'int 2'進入一個函數,而不是做完整的收集循環。 – Katana314

回答

1

你所尋找的是在System.Collections.Specialized

在此集合,你可以得到關鍵OrderedDictionary,您還可以在已對發現一個下一個下一個索引拿項目,但開箱實施從微軟將無法工作,因爲它缺少你所需要的方法,如TryGetValue或IndexOf。

看一看這些頁面:

MSDN

Custom ordered dictionary

0

你可以把信息在你的價值:

public class MyValue 
{ 
    string Value; 
    int NextId; 
    int PreviousId; 
} 

public Dictionary<int, MyValue>(); 

它是那麼瑣碎,讓您的前面或後面的ID。獲得您的下一個或以前的價值是微不足道的。

當然,插入邏輯要求您每次添加內容時都要更新之前的&。

+0

對於下一個和以前的ID,最好有'int?'。因爲那樣你就知道它結束了。其他明智的'0'可能會被另一個ID誤認。 –

相關問題