Wie aktualisiere ich den Wert für einen bestimmten Schlüssel in einem Wörterbuch Dictionary<string, int>
?
Wie aktualisiere ich den Wert für einen bestimmten Schlüssel in einem Wörterbuch Dictionary<string, int>
?
Antworten:
Zeigen Sie einfach auf das Wörterbuch bei der angegebenen Taste und weisen Sie einen neuen Wert zu:
myDictionary[myKey] = myNewValue;
Dies ist möglich, indem Sie auf den Schlüssel als Index zugreifen
zum Beispiel:
Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary["test"] = 1;
dictionary["test"] += 1;
Console.WriteLine (dictionary["test"]); // will print 2
++dictionary["test"];
oder dictionary["test"]++;
aber nur, wenn es einen Eintrag im Wörterbuch mit dem Schlüsselwert "test" gibt - Beispiel: if(dictionary.ContainsKey("test")) ++dictionary["test"];
else dictionary["test"] = 1; // create entry with key "test"
Sie können diesem Ansatz folgen:
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);
}
}
Der Vorteil, den Sie hier erhalten, besteht darin, dass Sie den Wert des entsprechenden Schlüssels in nur einem Zugriff auf das Wörterbuch überprüfen und abrufen. Wenn Sie ContainsKey
die Existenz überprüfen und den Wert mit aktualisieren, greifen dic[key] = val + newValue;
Sie zweimal auf das Wörterbuch zu.
dic.Add(key, newValue);
Sie verwenden dic[key] = newvalue;
.
Verwenden Sie LINQ: Zugriff auf das Wörterbuch für den Schlüssel und ändern Sie den Wert
Dictionary<string, int> dict = new Dictionary<string, int>();
dict = dict.ToDictionary(kvp => kvp.Key, kvp => kvp.Value + 1);
Hier ist eine Möglichkeit, durch einen Index zu aktualisieren, ähnlich wie foo[x] = 9
bei x
einem Schlüssel und 9 als Wert
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;
}
}
update - nur existent ändern. Um Nebenwirkungen des Indexers zu vermeiden, verwenden Sie:
int val;
if (dic.TryGetValue(key, out val))
{
// key exist
dic[key] = val;
}
aktualisieren oder (neu hinzufügen, wenn der Wert in dic nicht vorhanden ist)
dic[key] = val;
zum Beispiel:
d["Two"] = 2; // adds to dictionary because "two" not already present
d["Two"] = 22; // updates dictionary because "two" is now present
Dies kann für Sie funktionieren:
Szenario 1: Primitive Typen
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;
Szenario 2: Der Ansatz, den ich für eine Liste als Wert verwendet habe
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;
Hoffe, es ist nützlich für jemanden, der Hilfe braucht.