字典++没有按预期工作

时间:2013-06-20 09:56:12

标签: c# dictionary .net-2.0

假设我们有一个这样的词典:

var dic = new Dictionary<Int32, Int32>();

而密钥是ID,值是计数。 现在我们要添加一个新密钥。使用以下行完全正常:

dic[1] = 1; //adding ID 1, Count 1 to the current Dictionary

假设我们有一个包含以下值的整数列表:

var ids = new List<int> {1, 2, 3 , 1, 2};

我们希望获得包含以下内容的字典:

[1, 2] ==> (ID 1, Count 2)
[2, 2] ==> (ID 2, Count 2)
[3, 1] ==> (ID 3, Count 1)

显而易见的解决方案是:

foreach (var id in ids)
{
    dic[id]++;
}

但这会引发KeyNotFoundException。很明显,词典不支持运算符+=

我已经附上了这个问题的答案。 有没有更好的方法来实现这个目标?

2 个答案:

答案 0 :(得分:2)

我的解决方案:

var dic = new Dictionary<Int32, Int32>();
var ids = new List<int> { 1, 2, 3, 1, 2 };
foreach (var id in ids)
{
    if (dic.ContainsKey(id))
    {
        dic[id]++;
    } else {
        dic[id] = 1;
    }
}

答案 1 :(得分:2)

您可以使用LINQ更简单:

var dic = ids.GroupBy(id => id)
             .ToDictionary(g => g.Key, g => g.Count());