2009-10-28 62 views
5

所以我循環通過一些對象和初始化一個字典>對象。添加項目到一個詞典<int,列表<int>>

所以首先我檢查鍵存在,如果這樣做,我會添加到列表

如果沒有,我將創建一個新的密鑰和新名單

是,正確的邏輯?
我會做:

new List<int>(); 

我第一次正確插入項目?

即:

if(myDic.ContainsKey(car.ID)) 
{ 
     myDic[car.ID].Add(car.MfgID); 
} 
else 
{ 
    myDic.Add(car.ID, new List<int>); 
    myDic[car.ID].Add(car.MfgID); 
} 

回答

19

你的方法工作得很好。這有點低效,因爲它需要兩個字典查找(一個用於Contains,另一個用於將該項目添加到列表中)。你可以把它更有效地利用Dictionary.TryGetValue方法做:

List<int> list; 
if (!myDic.TryGetValue(car.ID, out list)) 
    myDic.Add(car.ID, list = new List<int>()); 
list.Add(car.MfgId); 

這是更有效的填充列表,並一次性添加到字典中(如果有可能你的情況,當然)。在C#3.0中,有一個名爲集合初始化功能,使得如果項目在編譯時已知很容易填充列表:

var list = new List<int> { 1, 9, 8, 9, 1, 8, 1, 2 }; 

您也可以考慮使用something like this to map a key to multiple values

+0

很好,現在你和裏德只需要將兩個答案合併爲一個:) – 2009-10-28 22:02:31

+0

呵呵,集合初始化器也許值得一提。 – 2009-10-28 22:03:09

+0

@Pavel:我的回答消除了在Reed的回答中提到的重新排序的需要。它總是執行單個字典查找。 – 2009-10-28 22:07:32

相關問題