C# 添加或更新具有非引用类型值的词典
在将此标记为副本之前,请仔细检查 我正在字典里积累一些数据C# 添加或更新具有非引用类型值的词典,c#,C#,在将此标记为副本之前,请仔细检查 我正在字典里积累一些数据 Dictionary<string, int> stats; 问题是这段代码对第一次出现的事件执行2次查找,否则执行3次查找。第一次发生没什么大不了的。但是这3个更新的查找非常糟糕。如何改进此功能?您可以在检查容器时获取值。事实上,在这种情况下,您可以使其无条件: int value; stats.TryGetValue(eventName, out value); stats[eventName] = value + e
Dictionary<string, int> stats;
问题是这段代码对第一次出现的事件执行2次查找,否则执行3次查找。第一次发生没什么大不了的。但是这3个更新的查找非常糟糕。如何改进此功能?您可以在检查容器时获取值。事实上,在这种情况下,您可以使其无条件:
int value;
stats.TryGetValue(eventName, out value);
stats[eventName] = value + eventValue;
这使用了这样一个事实,即如果没有eventName
的条目,value
将为0。如果需要,您可以将其明确化:
int value;
if (!stats.TryGetValue(eventName, out value))
{
stats.Add(eventName, eventValue);
}
else
{
stats[eventName] = value + eventValue;
}
不管是哪种方式,你现在只需要一次接一次
或者,您可以使用
ConcurrentDictionary
及其AddOrUpdate
方法。您可以在检查包含时获取值。事实上,在这种情况下,您可以使其无条件:
int value;
stats.TryGetValue(eventName, out value);
stats[eventName] = value + eventValue;
这使用了这样一个事实,即如果没有eventName
的条目,value
将为0。如果需要,您可以将其明确化:
int value;
if (!stats.TryGetValue(eventName, out value))
{
stats.Add(eventName, eventValue);
}
else
{
stats[eventName] = value + eventValue;
}
不管是哪种方式,你现在只需要一次接一次
或者,您可以使用ConcurrentDictionary
及其AddOrUpdate
方法