假设我们有一个这样的词典:
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
。很明显,词典不支持运算符+=
。
我已经附上了这个问题的答案。 有没有更好的方法来实现这个目标?
答案 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());