我的词典定义如下:
Dictionary<string, double> collection = new Dictionary<string, double>();
现在我希望通过它Key
来细化特定元素,如果缺少此Key
我想添加新的Key
,Value
,如果存在,我想要增加Value
:
string str;
if (!collection.ContainsKey(str))
_collection.Add(str, 0);
else
{
KeyValuePair<string, double> item = collection.FirstOrDefault(x => x.Key == str);
// Here i want to update my Value.
}
答案 0 :(得分:3)
您可以使用indexer使用递增的值更新它:
if (!collection.ContainsKey(str))
collection.Add(str, 0);
else
{
collection[str]++;
}
这是有效的,因为它与:
相同collection[str] = collection[str] + 1;
MSDN:
您还可以使用Item属性通过设置添加新元素 字典中不存在的键的值。 设置属性值时,如果键位于,则为 字典,与该键关联的值是 替换为指定值。如果钥匙不在 字典,键和值被添加到 字典。
如果您有另一个KeyValuePair<string, double>
集合作为评论,并且您希望在密钥存在时使用这些值更新字典,或者如果密钥不存在则添加它们:
foreach(KeyValuePair<string, double> pair in otherCollection)
{
if (!collection.ContainsKey(pair.Key))
collection.Add(pair.Key, 0);
else
{
collection[pair.Key] = pair.Value;
}
}
答案 1 :(得分:2)
我不明白为什么人们继续使用该字典反模式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;
答案 2 :(得分:1)
_collection[str]
会为您提供与[]
中指定的密钥相对应的值,因此,_collection[str]++
将按1
您必须更改else部分,如下所示:
string str;
if (!_collection.ContainsKey(str))
_collection.Add(str, 0);
else
{
_collection[str]++;
}
答案 3 :(得分:0)
对于C#7.0,最简单,最有效的方法是:
_collection.TryGetValue(str, out double value);
_collection[str] = value++;