2013-08-20 27 views
0

我正在寫需要使用 Dictionary<TKey,groupimplementation<TValue>>例如我用什麼程序是Dictionary<TKey,List<TValue>>,每次我需要添加項目的時間我需要初始化的T類型的列表,如果鍵沒有按」如果存在,我只需要訪問列表並添加項目。C#字典

*是否這樣做是最有效的方法(就速度而言)?或者還有其他方法嗎?

一件事是什麼時間複雜度檢查使用.ContainsKey()

的方式我無法使用iLookup,因爲它是不可變的,初始化一個唯一的辦法就是從.tolookup()梅索德關鍵

+2

爲什麼?大概你有性能(速度方面)的問題?你確定這是瓶頸?多少項目?有多慢?基本上,什麼? –

+1

只要您不需要檢查以確保列表中的對象存在,就可以以最快的速度執行此操作。 – ars265

+0

@GrantThomas超過10億至1億元的

回答

3

這是最有效的方式(在速度方面)做到這一點?或者是 還有其他方法嗎?

之前將項目添加到列表中,你必須初始化(如果列表尚未初始化)。只看你的描述(不是代碼)我只能猜測它是好的。要檢查密鑰是否存在,請使用ContainsKey,其複雜程度爲O(1)

什麼是時間複雜度用於檢查使用 .ContainsKey()鍵

Dictionary<TKey, TValue>.ContainsKey Method - MSDN

此方法接近的O(1)操作。

+1

非常感謝。 –

2

訪問和修改字典值的最有效方法是使用它的TryGetValue方法。

所以你只需要訪問它一次而不是兩次,如果你首先檢查它是否包含給定的密鑰。

例如:

List<TValue> theList; 
if (dictionary.TryGetValue(theKey, out theList)) 
    theList.Add(newItem); 
else 
    dictionary.Add(theKey, new List<TValue> { newItem }); 
+0

@時間Schmelter非常感謝你兩個答案都對我好,所以我選擇投票目前3:2。 –