Est-ce que quelqu'un sait s'il existe un bon équivalent à la Set
collection Java en C #? Je sais que vous pouvez imiter un ensemble en utilisant a Dictionary
ou a HashTable
en remplissant mais en ignorant les valeurs, mais ce n'est pas une manière très élégante.
la source
Si vous utilisez .NET 3.5, vous pouvez utiliser
HashSet<T>
. Il est vrai que .NET ne prend pas en charge les ensembles aussi bien que Java.Les PowerCollections de Wintellect peuvent également vous aider.
la source
Si vous utilisez .NET 4.0 ou version ultérieure:
Dans le cas où vous avez besoin de trier, utilisez
SortedSet<T>
. Sinon, si vous ne le faites pas, utilisez-leHashSet<T>
car c'estO(1)
pour rechercher et manipuler des opérations. AlorsSortedSet<T>
estO(log n)
pour la recherche et de manipuler les opérations.la source
J'utilise Iesi.Collections http://www.codeproject.com/KB/recipes/sets.aspx
Il est utilisé dans de nombreux projets OSS, je l'ai rencontré pour la première fois dans NHibernate
la source
J'utilise un wrapper autour d'un
Dictionary<T, object>
, stockant des valeurs nulles dans les valeurs. Cela donne O (1) ajouter, rechercher et supprimer sur les clés, et à toutes fins utiles agit comme un ensemble.la source
Jetez un œil à PowerCollections sur CodePlex. Outre Set et OrderedSet, il a quelques autres types de collections utiles tels que Deque, MultiDictionary, Bag, OrderedBag, OrderedDictionary et OrderedMultiDictionary.
Pour plus de collections, il y a aussi la bibliothèque de collections génériques C5 .
la source
Je sais que c'est un vieux thread, mais je rencontrais le même problème et j'ai trouvé que HashSet n'était pas très fiable car, étant donné la même graine, GetHashCode () a renvoyé des codes différents. Alors, j'ai pensé, pourquoi ne pas simplement utiliser une liste et masquer la méthode d'ajout comme celle-ci
Étant donné que List utilise la méthode Equals uniquement pour déterminer l'égalité, vous pouvez définir la méthode Equals sur votre type T pour vous assurer d'obtenir les résultats souhaités.
la source
List.Contains
de laO(n)
complexité, ce qui signifie que votreAdd
méthode devient désormais également de laO(n)
complexité. En supposant que la collection interne n'a pas besoin d'être redimensionnée,Add
pour les deux,List
etHashMap
devrait êtreO(1)
complexe. TLDR: Cela fonctionnera, mais c'est hacky et moins efficace.