wake-up-neo.com

Wie wird der im Wörterbuch in C # gespeicherte Wert aktualisiert?

Wie kann ich den Wert für einen bestimmten Schlüssel in einem Wörterbuch Dictionary<string, int> aktualisieren?

360
Amit

Zeigen Sie einfach auf das Wörterbuch und geben Sie einen neuen Wert an:

myDictionary[myKey] = myNewValue;
603
ccalboni

Dies ist durch den Zugriff auf den Schlüssel als Index möglich

zum Beispiel:

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

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 1 Zugriff auf das Wörterbuch prüfen und erhalten. Wenn Sie ContainsKey verwenden, um die Existenz zu prüfen und den Wert mit dic[key] = val + newValue; zu aktualisieren, greifen Sie zweimal auf das Wörterbuch zu.

40
max_force

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);
13
INT_24h

Hier ist eine Möglichkeit, über einen Index zu aktualisieren, ähnlich wie foo[x] = 9, wobei x ein Schlüssel und 9 der Wert ist

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

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

Ich hoffe es ist nützlich für jemanden, der Hilfe braucht.

0
Mister Pitt