Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字典++;没有按预期工作_C#_Dictionary_.net 2.0 - Fatal编程技术网

C# 字典++;没有按预期工作

C# 字典++;没有按预期工作,c#,dictionary,.net-2.0,C#,Dictionary,.net 2.0,假设我们有这样一本词典: var dic = new Dictionary<Int32, Int32>(); 假设我们有一个包含以下值的整数列表: var ids = new List<int> {1, 2, 3 , 1, 2}; 显而易见的解决办法是: foreach (var id in ids) { dic[id]++; } 但这会抛出一个KeyNotFoundException。因此,显然字典不支持运算符+= 我已经附上了这个问题的答案。 有没有更好

假设我们有这样一本词典:

var dic = new Dictionary<Int32, Int32>();
假设我们有一个包含以下值的整数列表:

var ids = new List<int> {1, 2, 3 , 1, 2};
显而易见的解决办法是:

foreach (var id in ids)
{
    dic[id]++;
}
但这会抛出一个
KeyNotFoundException
。因此,显然字典不支持运算符
+=

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

我的解决方案:

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;
    }
}
var dic=newdictionary();
var id=新列表{1,2,3,1,2};
foreach(id中的变量id)
{
if(dic.ContainsKey(id))
{
dic[id]+;
}否则{
dic[id]=1;
}
}
我的解决方案:

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;
    }
}
var dic=newdictionary();
var id=新列表{1,2,3,1,2};
foreach(id中的变量id)
{
if(dic.ContainsKey(id))
{
dic[id]+;
}否则{
dic[id]=1;
}
}

您可以使用LINQ来简化:

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

您可以使用LINQ实现更简单的功能:

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

我认为你的
else
应该包含
dic.Add(id,1)
.I stand correct:“您还可以使用[indexer]属性通过设置字典中不存在的键的值来添加新元素。”我认为您的
else
应该包含
dic.add(id,1)
.I stand correct,:“您还可以使用[indexer]属性通过设置字典中不存在的键的值来添加新元素。”我不能使用LINQ。它是.NET2.0。(现在添加标签)。但我告诉你这个解决方案会更干净@法比安比格勒:启用linq for.NET2.0怎么样?@CuongLe谢谢你的提示,我会看看的!我不能用林克。它是.NET2.0。(现在添加标签)。但我告诉你这个解决方案会更干净@法比安比格勒:启用linq for.NET2.0怎么样?@CuongLe谢谢你的提示,我会看看的!