[英]Adding to or updating a dictionary with not reference type value
在將其標記為重復項之前,請仔細檢查。
我正在字典中累積一些統計信息。
Dictionary<string, int> stats;
事件發生時,我會更新stats
:
if (!stats.ContainsKey(eventName))
stats.Add(eventName, eventValue);
else
stats[eventName] = stats[eventName] + eventValue;
問題在於此代碼對第一次發生的事件進行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
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.