【问题标题】:Add items to a Dictionary<int, List<int>>将项目添加到 Dictionary<int, List<int>>
【发布时间】:2009-10-28 21:55:33
【问题描述】:

所以我正在循环一些对象并初始化一个 Dictionary> 对象。

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

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

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

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

【问题讨论】:

    标签: c# collections dictionary


    【解决方案1】:

    您的方法效果很好。这有点低效,因为它需要两次字典查找(一个用于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 中,有一个名为 collection initializers 的功能,如果项目在编译时已知,则可以轻松填充列表:

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

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

    【讨论】:

    • 太好了,现在你和 Reed 只需要将两个答案合二为一:)
    • 哦,集合初始化器可能也值得一提。
    • @Pavel:我的回答消除了里德回答中提到的重新排序的需要。它总是进行一次字典查找。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多