Как обновить значение, хранящееся в словаре в С#?

Как обновить значение для определенного ключа в словаре Dictionary<string, int>?

Ответ 1

Просто укажите словарь на заданном ключе и назначьте новое значение:

myDictionary[myKey] = myNewValue;

Ответ 2

Это возможно, обратившись к ключу как индекс

, например:

Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary["test"] = 1;
dictionary["test"] += 1;
Console.WriteLine (dictionary["test"]); // will print 2

Ответ 3

Вы можете следовать этому подходу:

void addOrUpdate(Dictionary<int, int> dic, int key, int newValue)
{
    int val;
    if (dic.TryGetValue(key, out val))
    {
        // yay, value exists!
        dic[key] = val + newValue;
    }
    else
    {
        // darn, lets add the value
        dic.Add(key, newValue);
    }
}

Край, который вы получаете здесь, это то, что вы проверяете и получаете значение соответствующего ключа всего за 1 доступ к словарю. Если вы используете ContainsKey для проверки существования и обновления значения с помощью dic[key] = val + newValue;, вы дважды обращаетесь к словарю.

Ответ 4

Использование LINQ: доступ к словарю для ключа и изменение значения

Dictionary<string, int> dict = new Dictionary<string, int>();
dict = dict.ToDictionary(kvp => kvp.Key, kvp => kvp.Value + 1);

Ответ 5

Вот способ обновления индексом, похожим на foo[x] = 9, где x - это ключ, а 9 - значение

var views = new Dictionary<string, bool>();

foreach (var g in grantMasks)
{
    string m = g.ToString();
    for (int i = 0; i <= m.Length; i++)
    {
        views[views.ElementAt(i).Key] = m[i].Equals('1') ? true : false;
    }
}

Ответ 6

Это может работать для вас:

Сценарий 1: примитивные типы

string keyToMatchInDict = "x";
int newValToAdd = 1;
Dictionary<string,int> dictToUpdate = new Dictionary<string,int>{"x",1};

if(!dictToUpdate.ContainsKey(keyToMatchInDict))
   dictToUpdate.Add(keyToMatchInDict ,newValToAdd );
else
   dictToUpdate[keyToMatchInDict] = newValToAdd; //or you can do operations such as ...dictToUpdate[keyToMatchInDict] += newValToAdd;

Сценарий 2: подход, который я использовал для списка в качестве значения

int keyToMatch = 1;
AnyObject objInValueListToAdd = new AnyObject("something for the Ctor")
Dictionary<int,List<AnyObject> dictToUpdate = new Dictionary<int,List<AnyObject>(); //imagine this dict got initialized before with valid Keys and Values...

if(!dictToUpdate.ContainsKey(keyToMatch))
   dictToUpdate.Add(keyToMatch,new List<AnyObject>{objInValueListToAdd});
else
   dictToUpdate[keyToMatch] = objInValueListToAdd;

Надеюсь, что это полезно для тех, кто нуждается в помощи.