2011-03-13 87 views
1

我正在搜索數據結構來存儲唯一索引(整數)列表。對我來說最重要的特點是:
- 快速檢查是否在設定值的存在價值 - 就像在哈希表
- 小尺寸的內存和序列化之後 - 像陣列
它當然應該支持添加,刪除元素,但這種行爲的表現並不重要。快速搜索和小尺寸搜索數據結構

框架中是否有任何這樣的結構?或者我應該創建它?

使用示例: 我有班級爲用戶和在這個類中的幾個(〜20)各種數據列表。 (訪問,特權,文件等)。我需要將用戶數據存儲在緩存中以便在回發期間快速訪問 - 每次查詢數據庫都非常緩慢。整數是在分貝指數,

+0

可能的重複[在.NET中是否有排序的集合類型?](http://stackoverflow.com/questions/196512/is-there-a-sorted-collection-type-in​​-net) – 2011-03-13 17:45:50

+0

你是否意味着行爲如列表? – 2011-03-13 17:45:56

+0

指數是否在一定範圍內?即我假定它們是正值,但是你是否知道它們會低於某個值N? – I82Much 2011-03-13 17:46:17

回答

4

我認爲你正在尋找的HashSet <牛逼> http://msdn.microsoft.com/en-us/library/bb359438.aspx

它的實施,使得它提供了O(1)查找(或者這樣的文件說,但我懷疑它真的是由於它使用哈希表實現,所以分期償還O(1)...)並支持許多集合操作。

我不確定它的序列化格式,但我會進一步調查它。如果你真的想它序列化到一個數組,你總是可以做

var mySet = new HashSet<T>(new []{ 1, 2, 3, 3, 4, 5, 4, 5 }); 
Serialize(mySet.ToArray()); 

,然後反序列化剛剛創建的序列化陣列一個HashSet。

+0

['HashSet .Contains()'](http://msdn.microsoft.com/zh-cn/library/bb356440.aspx)根據文檔是O(1),而不是O(log n) – 2011-03-13 17:52:19

+0

是,那是正確的。我正在考慮使用紅黑樹實現的SortedSet(T)。 – Jake 2011-03-13 17:56:01

+0

你是對的 - 我忘了字典的變種。它速度很快,但序列化後的大小比序列化列表大2倍。但我認爲這就是我正在尋找的:) – 2011-03-18 08:06:36