我在一個場景,我需要存儲的KeyValuePair
收集工作,有DateTimeOffset
關鍵。 我正在接收這個數據的列表(通過Http請求),我只需要讀取並從中生成集合。要求集合保持排序,並且它必須是可枚舉的。另外,我可能需要通過密鑰對這些數據進行大量的查找。合適的集合類排序的數據需要快速檢索
另請注意,我收到的數據本身已經排序。我可以定期重複接收數據並再次生成收集的操作。但是,現有集合未被修改,而是每次刷新數據時都會創建一個新集合。
現在,我心裏有以下方法:
- 使用
SortedDictionary<,>
(我現在的方法)。 - 使用
Dictionary<,>
,在填充接收到的數據中的所有項目後手動對其進行排序。 (雖然這使得它非常快速查找(O(1)),我現在需要對數據進行排序,因爲在一個有序的方式加入,當Dictionary<,>
不維護的項目。) - 使用一個簡單的數組(或
List
),它直接從數據填充。元素的順序是隱含的。然後,使用鍵上的二進制搜索來完成搜索項目(即查找)。
哪一種方法是適合這種情況?我可以使用上述方法還有其他選擇或變體,這會給我更好的整體性能嗎?
編輯
對不起,我忘了提,我對WinRT的(特別是Windows phone)系統平臺的開發。因此,我不能使用SortedList<,>
(也不是OrderedDictionary
),這是@lc指出的最佳選擇。
此外,我的收藏將只有幾百個項目。也許在這個規模上可能沒有任何顯着差異,但我想知道一個答案都是一樣的。
我們假設有一個數據結構可以做你想做的事情。你能詳細說明你想要提出這個數據結構的問題的具體細節以及你想要什麼樣的答案嗎?例如,你需要通過索引來訪問它嗎?你需要輸出它作爲一個整體嗎?它只是在途中排序嗎?如果你爲索引+排序訪問和直接密鑰查找的字典組合了一個列表,那會起作用嗎? – 2015-03-03 10:55:03
快速查看MSDN,'SortedList <,>'實際上可能是您所追求的。尤其要看https://msdn.microsoft.com/en-us/library/ms132319%28v=vs.110%29.aspx – 2015-03-03 10:58:01
的備註部分取決於你做得最多的選擇你的數據結構。如果你主要查找並且很少修改集合 - 你需要一個在查找中性能更好的集合。等等。 [這可能有助於](http://geekswithblogs.net/BlackRabbitCoder/archive/2011/06/16/c.net-fundamentals-choosing-the-right-collection-class.aspx) – 2015-03-03 10:59:47