2010-08-17 74 views
3

我需要一個有效的數據結構來存儲整數列表。列表中的金額範圍從1到大概不超過1000.該列表將每個請求查詢大約20次。什麼是最有效的集合類型來存儲它們?什麼是最有效的數據結構來存儲需要在.Net中查找的整數列表?

UPDATE

爲了讓多一點的洞察力,我們將www.wikipediamaze.com (a little game I wrote)爲例(不是真實的情景,但足夠接近談話)。對於任何給定頁面上的謎題列表,我現在正在返回一個拼圖表中的列表,該列表連接到存儲當前用戶玩過哪些謎題的表格。相反,我想緩存不知道的難題列表給用戶。所以我正在做的是首先加載並緩存數據庫中的謎題列表。然後我加載並緩存用戶玩過的拼圖列表。然後,當我遍歷難題,以顯示他們,我想這樣做:

protected BestDataStructure<long> PlayedPuzzles {get; set;} //Loaded from session 

protected bool HasBeenPlayed(long puzzleId) 
{ 
    return PlayedPuzzles.Contains(puzzleId) 
} 

每當他們玩一個新的難題,我將記錄保存到數據庫中,並追加到存儲在會話列表。

謝謝!

+0

當你說「質疑」時,你是什麼意思? – Mark 2010-08-17 16:31:38

+0

我的意思是搜索。我需要查看一個請求中是否包含大約20次的特定整數。 – Micah 2010-08-17 16:33:06

+1

可能有幾種解決方案之一。你能否提供更多信息,例如*你想要執行查找/你需要提取哪些信息?指定數字範圍本身也可能有所幫助。歡呼聲 – Noldorin 2010-08-17 16:33:56

回答

5

這取決於你如何查詢他們,但一個簡單的數組,或HashSet<int>想到。

兩者都是O(1)當你索引它們。 HashSet.Contains也是O(1)。

迴應對此問題的評論:使用HashSet,因爲您需要檢查是否存在指定的整數。你應該在HashSet上使用Contains()來做到這一點;它會給你最好的表現。如果您需要存儲與該值相關的其他值,可以使用Dictionary。

2

如果您正在尋找能有效執行操作的結構,例如Contains(),那麼HashSet<int>就是您要查找的結果。 HashSet<int>對於Contains()是O(1)(恆定時間),這與您將要獲得的複雜程度相當。

1

如果你需要檢查元素的存在,那麼可能bool[] 1000個元素,併爲現有的整數元素設置爲真?

+0

它需要包含一些等於所涉及的整數範圍的整數值的元素,這可能確實大得多。 – Noldorin 2010-08-17 16:36:02

+0

是的,當然。似乎昨天我在回答時有點睏倦,並混合了1000個元素,其值爲1..1000。 – PiRX 2010-08-18 03:21:01

相關問題