簡體   English   中英

添加或更新具有非引用類型值的字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM