2016-10-20 3 views
0

Dies ist kein Duplikat ist, da ich Objekte als SchlüsselC# Prüfen, ob im Wörterbuch duplizieren

bin mit Ich versuche, ein Wörterbuch zu erstellen, die überprüft, ob das Objekt, das ein Duplikat eingefügt Sein ist, und wenn es ist, wird es seinen Wert erhöhen. Mein Wörterbuch wie folgt aussieht:

Dictionary<Object, int> output = new Dictionary<Object, int>(); 

In diesem Beispiel Objekt ist das Objekt, das ich überprüfen möchten, ob es ein Duplikat ist. Die ganze Zahl steht für einen "Gewicht" -Wert, dies wird in meiner Anwendung weiter verwendet.

Wie überprüfe ich, ob es sich bei einem Objekt um ein Duplikat handelt, und wie erhöhe ich diese Ganzzahl?

Vielen Dank im Voraus!

+0

Sie können keine doppelten Schlüssel in ein Wörterbuch einfügen. Es wird fehlschlagen mit "Schlüssel bereits existiert" –

+0

Dies ist ziemlich viel durch [die Beispiele in der Dokumentation] (https://msdn.microsoft.com/en-us/library/xfhwa508 (v = vs.110) .aspx abgedeckt) oder ein grundlegendes Tutorial zur Verwendung eines Wörterbuchs. –

+0

Okay und wie würde ich die Int erhöhen, wenn es scheitert? – RandomStranger

Antwort

2

Hier effizient ist. Die Leute vergessen oft TryGetValue.

Objekt ist Referenztyp, also auch wenn Ihre Objekte dieselben Werte haben, können sie sich an verschiedenen Positionen im Speicher befinden. Damit dies mit Objekten funktioniert, sollten Sie die Equals- und GetHashCode-Methoden für Ihre konkrete Klassenimplementierung überschreiben. Beispiel:

public class MyClass 
{ 
    public int Value {get;set;} 

    public override int GetHashCode() { return Value.GetHashCode(); } 
    public override bool Equals(object other){return ((MyClass)other).Value.Equals(Value); } 
} 
+0

Dies funktioniert jedoch nicht für Objekte. Ich änderte es, wo das Wörterbuch 2 Eingänge enthält, die ID des Objekts und das Gewicht und es funktioniert gut. Kann dies geändert werden, wo es noch Objekte enthält? – RandomStranger

+0

Danke! Das hat funktioniert! – RandomStranger

1

Es kann so einfach sein wie:

int currentCount = output.ContainsKey(obj) ? output[obj] : 0; 
output[obj] = currentCount + 1; // Inserts if key not found and updates otherwise 
+0

Das bringt mir ein 'Kann die Indizierung mit [] auf einen Ausdruck vom Typ' Methodengruppe 'nicht anwenden. Mache ich etwas falsch? – RandomStranger

Verwandte Themen