Weiß jemand, ob es ein gutes Äquivalent zu Javas Set
Sammlung in C # gibt? Ich weiß, dass Sie eine Menge mit a Dictionary
oder a etwas nachahmen können HashTable
, indem Sie die Werte auffüllen, aber ignorieren, aber das ist keine sehr elegante Methode.
quelle
Wenn Sie .NET 3.5 verwenden, können Sie verwenden
HashSet<T>
. Es ist wahr, dass .NET nicht so gut für Sets geeignet ist wie Java.Die Wintellect PowerCollections können ebenfalls hilfreich sein.
quelle
Wenn Sie .NET 4.0 oder höher verwenden:
In dem Fall, in dem Sie sortieren müssen, verwenden Sie
SortedSet<T>
. Wenn Sie dies nicht tun, verwenden Sie es,HashSet<T>
da esO(1)
zum Suchen und Bearbeiten von Vorgängen dient. WährendSortedSet<T>
istO(log n)
für die Suche und Operationen manipulieren.quelle
Ich verwende Iesi.Collections http://www.codeproject.com/KB/recipes/sets.aspx
Es wird in vielen OSS-Projekten verwendet und ist mir zum ersten Mal in NHibernate begegnet
quelle
Ich benutze einen Wrapper um a
Dictionary<T, object>
und speichere Nullen in den Werten. Dies gibt O (1) das Hinzufügen, Nachschlagen und Entfernen der Schlüssel und verhält sich in jeder Hinsicht wie ein Satz.quelle
Schauen Sie sich PowerCollections bei CodePlex an. Neben Set und OrderedSet gibt es noch einige andere nützliche Sammlungstypen wie Deque, MultiDictionary, Bag, OrderedBag, OrderedDictionary und OrderedMultiDictionary.
Für weitere Sammlungen gibt es auch die C5 Generic Collection Library .
quelle
Ich weiß, dass dies ein alter Thread ist, aber ich hatte das gleiche Problem und fand HashSet sehr unzuverlässig, da GetHashCode () bei gleichem Startwert unterschiedliche Codes zurückgegeben hat. Also dachte ich mir, warum nicht einfach eine Liste verwenden und die Add-Methode so ausblenden
Da List die Equals-Methode ausschließlich zur Bestimmung der Gleichheit verwendet, können Sie die Equals-Methode für Ihren T-Typ definieren, um sicherzustellen, dass Sie die gewünschten Ergebnisse erhalten.
quelle
List.Contains
liegt in derO(n)
Komplexität, was bedeutet, dass IhreAdd
Methode jetzt auch komplex wirdO(n)
. Angenommen, die Größe der inneren Sammlung mussAdd
für beide nicht geändert werdenList
undHashMap
sollteO(1)
komplex sein. TLDR: Das wird funktionieren, aber es ist hackig und weniger effizient.