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. 所以很明显+=,字典不支持运算符。

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

4

2 回答 2

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;
    }
}
于 2013-06-20T09:56:12.127 回答
2

您可以使用 LINQ 更简单:

var dic = ids.GroupBy(id => id)
             .ToDictionary(g => g.Key, g => g.Count());
于 2013-06-20T09:59:34.397 回答