2008-08-13 12 views
37

Idealmente, estoy buscando una clase de conjunto lógico con plantillas. Tendría todas las operaciones de conjunto estándar como Unión, Intersección, Etc. y colapsar elementos duplicados.¿Hay una estructura de datos "Establecer" en .Net?

Terminé creando mi propia clase de conjunto basada en el Diccionario de C# <> - simplemente usando las teclas.

+0

.Net honestamente no tiene una colección de conjuntos? Qué decepción masiva. Otra ventaja para Java. –

+0

@ d03boy: Bueno, ahora tiene HashSet , pero después de usarlo un poco creo que la interfaz realmente apesta. – Skurmedel

+3

.NET 4 tiene una interfaz ISet junto con dos implementaciones, HashSet y SortedSet –

Respuesta

36

HashSet<T> es lo más cercano que obtendrá, creo.

+0

Matt, +1. Eso suena exactamente a lo que pidió. Parece que se agregó mucho después de que se escribió el artículo del proyecto de código. –

10

No, no hay uno de forma nativa en el marco. Existe una implementación de código abierto que la mayoría de los proyectos usan (es decir, nHibernate) llamada Iesi.Collections. Aquí está un artículo CodeProject al respecto:

http://www.codeproject.com/KB/recipes/sets.aspx

6

No creo que C# tiene nada incorporado, pero sé que hay un par de implementaciones que flotan alrededor en la red. También hay algunos buenos artículos acerca de este tipo de cosas:

This is part 6 de una serie sobre la representación eficiente de la estructura de datos. Esta parte se enfoca en representar conjuntos en C#.

An implementation de una colección conjunto
An implementation de una clase conjunto
Yet another implementation de una clase conjunto

Y por último ...

De hecho, he utilizado this library mí mismo como la base de un conjunto de aplicación eso lo hice hace un año o así.

9

¿Has echado un vistazo al HashSet en 3.5?

Cuestiones relacionadas