添加或更新不具有引用类型值的字典

时间:2014-05-30 10:20:09

标签: c#

在将此标记为重复之前,请仔细检查。

我在词典中积累了一些统计数据。

Dictionary<string, int> stats;

当事件发生时,我更新stats

if (!stats.ContainsKey(eventName))
    stats.Add(eventName, eventValue);
else
    stats[eventName] = stats[eventName] + eventValue;

问题是这段代码会对第一次出现的事件进行2次查找,否则会进行3次查找。第一次出现并不是什么大问题。但是这3次更新的查找真的很糟糕。我怎么能改善这个?

1 个答案:

答案 0 :(得分:4)

您可以在检查包含时获取值。事实上,在这种情况下,你可以使它无条件:

int value;
stats.TryGetValue(eventName, out value);
stats[eventName] = value + eventValue;

如果value没有条目,则使用eventName为0的事实。如果你愿意,你可以明确地说明:

int value;
if (!stats.TryGetValue(eventName, out value))
{
    stats.Add(eventName, eventValue);
}
else
{
    stats[eventName] = value + eventValue;
}

无论哪种方式,现在你只需要一次获取和一次设置。

或者,您可以使用ConcurrentDictionary及其AddOrUpdate方法。