Wie kann ich testen, ob eine C # Hashtabelle ein bestimmtes Schlüssel / Wert-Paar enthält?

7

Ich speichere eine Menge vermeintlich eindeutiger Artikel-IDs als Schlüssel und die Dateispeicherorte als Wert in einer Hash-Tabelle, während ich eine Tabelle durchquere. Während ich es durchlaufe, muss ich sicherstellen, dass das Schlüssel / Standort-Paar eindeutig ist oder eine Fehlermeldung ausgibt. Ich habe die Hashtabelle eingerichtet und lade die Werte, bin mir aber nicht sicher, was ich testen soll:

%Vor%     
Brian 19.03.2009, 17:26
quelle

8 Antworten

11

Versuchen Sie Folgendes:

%Vor%

Wenn Sie .NET 2.0 oder höher verwenden, sollten Sie Generics wie folgt verwenden:

%Vor%

Tatsächlich habe ich nur überprüft, und es sieht so aus, als ob HashSet nur .NET 3.5 ist. Ein Wörterbuch wäre für 2.0 geeigneter:

%Vor%     
Chris Doggett 19.03.2009, 17:30
quelle
4

Wenn Sie stattdessen Dictionary verwenden, würde die Methode TryGetValue helfen. Ich denke nicht, dass es einen wirklich besseren Weg für die ziemlich veraltete Klasse Hashtable gibt.

%Vor%     
Mehrdad Afshari 19.03.2009 17:29
quelle
3
%Vor%     
Ken Browning 19.03.2009 17:29
quelle
3

ContainsKey ist die beste Methode.

Wenn Sie nicht gezwungen werden, .NET 1.1 zu verwenden, würde ich das in .NET 2.0 eingeführte Wörterbuch verwenden.

Es ist viel besser als eine Hashtable von der Leistung und ist stark typisiert.

%Vor%     
David Basarab 19.03.2009 17:32
quelle
2

Warum verwenden Sie nicht stattdessen Dictionary ?

>

Das wirft eine ArgumentException, wenn Sie Add einen Schlüssel versuchen, der bereits in Dictionary existiert.

Auf diese Weise können Sie das Duplikat in dem Moment erfassen, in dem es hinzugefügt wird, anstatt später einen check_for_duplicates -Test durchzuführen.

    
GrahamS 19.03.2009 18:23
quelle
2
%Vor%

Ich glaube, das ist es wonach Sie suchen.

EDIT - Sieht so aus als wäre ich bis zum Anschlag geschlagen worden: P

    
Matt Grande 19.03.2009 17:34
quelle
1

Es hängt irgendwie davon ab, was das Array articles ist ... Sie wollen etwas wie:

%Vor%

Angenommen, das Element ist eine Form der Suche. Wirklich müssen Sie einen Gegenstand werfen oder ein Typsystem benutzen, um tatsächlich über einen Index auf irgendwelche Werte zuzugreifen.

    
Ian 19.03.2009 17:31
quelle
1

Du hast nicht gesagt, welche Version der Dinge du benutzt hast. Gibt es einen Grund, warum Sie Hashtable oder HashSet verwenden müssen? Sie müssten nicht nach Duplikaten suchen, wenn Ihre Datenstruktur dies nicht zulässt. Siehe auch:

Ссылка

Ansonsten ist die Frage, wie man das Gleiche in Hashtable erreichen kann, bereits beantwortet worden. Ich weise nur darauf hin, dass Sie nicht alle pathologischen Untersuchungen durchführen müssen, wenn Sie es überhaupt verbieten.

    
Jason Stelzer 17.04.2009 17:51
quelle

Tags und Links