C# dictionary TryGetValue mit int-Werten, wie Sie vermeiden Doppel-lookup
Wenn dabei so etwas wie:
int value;
if (dict.TryGetValue(key, out value))
{
if (condition)
{
//value = 0; this copies by value so it doesn't change the existing value
dict[key] = 0;
}
}
else
{
dict[key] = 0;
}
Gibt es eine Möglichkeit kann ich vermeiden, index-lookup ersetzen Sie den vorhandenen Wert? Ich bin schon die überprüfung der Schlüssel vorhanden ist mit TryGetValue, so dass es scheint wie eine Verschwendung zu haben, abrufen Wert von index wieder.
Auf einem separaten Hinweis, wie in der else{} Teil von meinem code ist es im Allgemeinen als gute Praxis, verwenden Sie den indexer, wenn das hinzufügen von neuen oder die Ersetzung der alten Werte, und fügen Sie es zu machen klar, das Sie hinzufügen, und nicht zu ersetzen? Oder soll ich einfach verwenden Sie den indexer, jedes mal? Die Art und Weise habe ich gelernt, Wörterbuch benutzen, mache ich immer eine TryGetValue-lookup und in der else-Teil I behandeln Fälle, in denen kein Schlüssel vorhanden ist.
- Sie sind nicht auf der Suche es zweimal.
- Mit dem indexer hat eine lookup-wenn ich mich Recht erinnere ;p
- hat Ihr (Zustand) abhängig
value
? - ja, es macht einen Vergleich
if (!dict.TryGetValue(key, out value) || value > 0) { dict[key] = 0; }
können Sievalue
, da wirst du nur bekommen Vergangenheit die||
wenn die TryGet gearbeitet.- Es klingt fast wie ein Verweis auf den Eimer wird der Wert gespeichert. Dies ist nicht ausgesetzt .NET. Auch würden Sie haben, um mit einem valuetype-Eimer, könnte schwierig sein.
- In Bezug auf deine kleine Frage, ich persönlich würde lieber
dict.Add(key, 0)
überdict[key] = 0
in den Fällen, wo man weiß, diekey
ist neu.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht dass ich wüsste - aber-Wörterbuch sollte der Zugriff sehr schnell, es sei denn, Sie haben eine benutzerdefinierte Klasse, die außer Kraft gesetzt
GetHashCode
schlecht.Wenn Sie nicht sehen, ein performance-problem, weil der Doppel-lookup würde ich in Ruhe lassen.
Können Sie versuchen, diese aus
Die Essenz der Geschichte ist, der Typ, den Sie Holen heraus, ist ein generischer Typ und ist aufgeteilt auf heap. also, wenn Sie Holen es heraus, es kommt heraus als Wert. Allerdings, wenn Sie fetch out-Objekt wird eine Referenz auf das original zugewiesen-Objekt, und ändern Sie den Wert einer bestimmten Eigenschaft des Objekts.
Ich lieber zu definieren Bequemlichkeit extension Methoden für Dinge wie diese. Zum Beispiel:
Gibt es wenig Grund zur Sorge über die Leistung von Wörterbuch hashing & Lookup - ich bin in Erster Linie mit der Lesbarkeit und Wartbarkeit. Mit der oben genannten Erweiterung Methoden, diese Art von Ding ist ein one-liner:
(Disclaimer: nicht die
if (condition)
überprüfen - ich habe selten die Erfahrung mit diesen Szenarien)