将项添加到Dictionary <int,list <int =“”>&gt; </int,>

时间:2009-10-28 21:55:33

标签: c# collections dictionary

所以我循环浏览一些对象并初始化一个Dictionary&gt;对象

首先,我检查密钥是否存在,如果存在,我将添加到List

如果没有,我将创建一个新密钥和新列表

这是正确的逻辑吗? 我将不得不做:

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);
}

1 个答案:

答案 0 :(得分:23)

你的方法很好。它有点低效,因为它需要两个字典查找(一个用于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