2008-12-09 9 views
10

Existe-t-il un conteneur générique implémentant le comportement 'set' dans .NET?.NET Generic Set?

Je sais que je pourrais juste utiliser un Dictionary<T, Object> (et éventuellement ajouter nulls comme valeurs), parce que ses touches agissent comme un ensemble, mais j'étais curieux de savoir s'il y avait quelque chose de prêt à l'emploi.

+0

La dernière fois que j'ai vérifié, en Java, HashSet est mis en œuvre avec HashMap <=> Dictionnaire (avec des valeurs null) mais dans .NET, HashSet ne pas utiliser toute collection. C'est une implémentation "de base". –

Répondre

19

HashSet<T> dans .NET 3.5

+1

BEHOLD! http://msdn.microsoft.com/en-us/library/bb359438.aspx – longda

3

J'utilise les Iesi.Collections. namespace qui vient avec NHibernate (docs here) - peut-être utile de considérer si vous êtes .NET < 3.5

1

Introduit dans .NET 3.5: HashSet<T> (voir ci-dessous).

Introduit en .NET 4.0: ISet<T>:

fournit l'interface de base pour l'abstraction des ensembles. Cette interface fournit des méthodes pour implémenter des ensembles, qui sont des collections qui ont des éléments uniques et des opérations spécifiques.

L'interface a deux implémentations dans le .NET 4+ BCL:

  • HashSet<T>:

    ... fournit des opérations de réglage haute performance. Un ensemble est une collection qui contient pas d'éléments dupliqués, et dont les éléments ne sont en aucun ordre particulier

  • SortedSet<T>:

    représente une collection d'objets qui sont conservées dans l'ordre. Un SortedSet (Of T) maintient un ordre trié lorsque des éléments sont insérés et supprimés sans affecter les performances. Les éléments en double ne sont pas autorisés.

FWIW: Il y a aussi un internalclass TreeSet<T>: SortedSet<T> sous l'espace de noms System.Collections.Generic. Son seul but semble être l'utilisation dans l'implémentation de SortedDictionary<TKey, TValue>.