elementat c# dictionary

elementat - ¿Cómo actualizar el valor almacenado en el Diccionario en C#?



c# dictionary initialization (6)

¿Cómo actualizar el valor de una clave específica en un diccionario Dictionary<string, int> ?


Aquí hay una manera de actualizar por un índice como foo[x] = 9 donde x es una clave y 9 es el valor

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; } }


Es posible accediendo a la clave como índice.

por ejemplo:

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


Esto puede funcionar para usted:

Escenario 1: tipos primitivos

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.Where(kvp=>kvp.Key==keyToMatchInDict).FirstOrDefault().Value ==newValToAdd; //or you can do operations such as ...Value+=newValToAdd;

Escenario 2: el enfoque que utilicé para una lista como valor

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.Where(kvp=>kvp.Key==keyToMatch).FirstOrDefault().Value.Add(objInValueListToAdd);

Espero que sea útil para alguien que necesita ayuda.


Puedes seguir este enfoque:

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); } }

La ventaja que obtiene aquí es que verifica y obtiene el valor de la clave correspondiente en solo 1 acceso al diccionario. Si usa ContainsKey para verificar la existencia y actualizar el valor usando dic[key] = val + newValue; entonces estás accediendo al diccionario dos veces.


Solo apunte al diccionario en la clave dada y asigne un nuevo valor:

myDictionary[myKey] = myNewValue;


Use LINQ: acceso al diccionario para la clave y cambie el valor

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