c# - 将项目添加到 Dictionary<int, List<int>>

标签 c# collections dictionary

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

所以首先我检查 key 是否存在,如果存在我将添加到列表

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

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

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

最佳答案

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

关于c# - 将项目添加到 Dictionary<int, List<int>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640373/

相关文章:

javascript - 将 2 个数字组合起来用作对象的键的有效方法是什么?

python - 有没有办法连续存储以前的值并在满足新条件时更改?

python - 如何将列表中的每个字典转换为Python中的嵌套字典?

c# - C# 4.0 中的 Barrier 和 C# 3.0 中的 WaitHandle 之间的区别?

java - foreach 语法中的三元运算符

c# - 实现 IEnumerable 的类实例的技术正确术语是什么?

c# - 如何保留仅包含最后 n 个对象的列表?

c# - 将具有不同关系值的表转换为 Excel 列

c# - 使用 LINQ 合并两个字典

c# - 检查枚举标志的最佳实践