C# 按键查找字典项后增加字典值

C# 按键查找字典项后增加字典值,c#,dictionary,C#,Dictionary,我有一本字典,定义如下: Dictionary<string, double> collection = new Dictionary<string, double>(); 您可以使用以递增的值对其进行更新: if (!collection.ContainsKey(str)) collection.Add(str, 0); else { collection[str]++; } 这是有效的,因为它与: collection[str] = collect

我有一本字典,定义如下:

Dictionary<string, double> collection = new Dictionary<string, double>();
您可以使用以递增的值对其进行更新:

if (!collection.ContainsKey(str))
    collection.Add(str, 0);
else
{
    collection[str]++;
}
这是有效的,因为它与:

collection[str] = collection[str] + 1;
MSDN:

您还可以使用Item属性通过设置 字典中不存在的键的值。 设置属性值时,如果键位于 字典中,与该键关联的值为 替换为指定的值。如果钥匙不在 字典中,键和值被添加到 字典


如果您有另一个注释为的
KeyValuePair
集合,并且如果密钥存在,您希望使用这些值更新词典,或者如果密钥不存在,则添加这些值:

foreach(KeyValuePair<string, double> pair in otherCollection)
{
    if (!collection.ContainsKey(pair.Key))
        collection.Add(pair.Key, 0);
    else
    {
        collection[pair.Key] = pair.Value;
    }
}
foreach(其他集合中的KeyValuePair对)
{
if(!collection.ContainsKey(pair.Key))
collection.Add(pair.Key,0);
其他的
{
集合[pair.Key]=pair.Value;
}
}
您可以使用以递增的值对其进行更新:

if (!collection.ContainsKey(str))
    collection.Add(str, 0);
else
{
    collection[str]++;
}
这是有效的,因为它与:

collection[str] = collection[str] + 1;
MSDN:

您还可以使用Item属性通过设置 字典中不存在的键的值。 设置属性值时,如果键位于 字典中,与该键关联的值为 替换为指定的值。如果钥匙不在 字典中,键和值被添加到 字典


如果您有另一个注释为的
KeyValuePair
集合,并且如果密钥存在,您希望使用这些值更新词典,或者如果密钥不存在,则添加这些值:

foreach(KeyValuePair<string, double> pair in otherCollection)
{
    if (!collection.ContainsKey(pair.Key))
        collection.Add(pair.Key, 0);
    else
    {
        collection[pair.Key] = pair.Value;
    }
}
foreach(其他集合中的KeyValuePair对)
{
if(!collection.ContainsKey(pair.Key))
collection.Add(pair.Key,0);
其他的
{
集合[pair.Key]=pair.Value;
}
}

\u collection[str]
将为您提供与
[]
中指定的键相对应的值,因此,
\u collection[str]+
将使与键相对应的值增加
1

您只需按如下方式更改else部分:

string str;
if (!_collection.ContainsKey(str))
    _collection.Add(str, 0);
else
{
   _collection[str]++;
}

\u collection[str]
将为您提供与
[]
中指定的键相对应的值,因此,
\u collection[str]+
将使与键相对应的值增加
1

您只需按如下方式更改else部分:

string str;
if (!_collection.ContainsKey(str))
    _collection.Add(str, 0);
else
{
   _collection[str]++;
}

我不明白为什么人们继续用字典反模式发布代码
if(dic.ContansKey(key))value=dic[key]
。最有效、最正确的方法是这样

string str;
double value;
if (!_collection.TryGetValue(str, out value))
{
    // set the initial value
    _collection.Add(str, 0);
}
else
{
    // update the existing value
    value++;    
    _collection[str] = value;
}
请注意,注释仅用于示例,通常只是

if (!_collection.TryGetValue(str, out value))
    _collection.Add(str, 0);
else
    _collection[str] = value + 1;

我不明白为什么人们继续用字典反模式发布代码
if(dic.ContansKey(key))value=dic[key]
。最有效、最正确的方法是这样

string str;
double value;
if (!_collection.TryGetValue(str, out value))
{
    // set the initial value
    _collection.Add(str, 0);
}
else
{
    // update the existing value
    value++;    
    _collection[str] = value;
}
请注意,注释仅用于示例,通常只是

if (!_collection.TryGetValue(str, out value))
    _collection.Add(str, 0);
else
    _collection[str] = value + 1;
使用C#7.0,最简单、最有效的方法是:

_collection.TryGetValue(str, out double value);
_collection[str] = value++;
使用C#7.0,最简单、最有效的方法是:

_collection.TryGetValue(str, out double value);
_collection[str] = value++;

您不应该使用FirstOrDefault在字典中查找条目。直接使用索引:collection[str]您不应该使用FirstOrDefault在字典中查找项。直接使用索引:collection[str]好的,但如果我想循环我的集合并用特定值更新我的值?@berrywer:这是一个完全不同的问题,我想你需要为此创建另一篇文章。@berrywer:什么集合?您在代码中使用的是
\u collection
collection
,这令人困惑。@berrywer:我编辑了我的答案,向您展示了如何循环另一个集合来更新此词典。我希望插入不同的值,而不是使用++,这样我就不能这样做(只有在我想增加exist值的情况下)-有什么建议吗?好的,那很好,但如果我想循环我的收藏并用特定的值更新我的值?@berrywer:这是一个完全不同的问题,我想你需要为此创建另一篇帖子。@berrywer:什么收藏?您在代码中使用的是
\u collection
collection
,这令人困惑。@berrywer:我编辑了我的答案,向您展示了如何循环另一个集合来更新此词典。我希望插入不同的值,而不是使用++,这样我就不能这样做(只有在我想增加exist值的情况下)-有什么建议吗?使用ContainsKey效率低。使用ContainsKey效率低。