2010-03-06 21 views
44

Creo que otra forma de expresar esto sería "¿Hay una clase como List<> en C#, pero optimizada para verificar si hay un valor particular presente?" Estoy seguro de que para un pequeño conjunto de valores, List<>.Contains probablemente estaría bien, pero ¿qué ocurre si tengo un conjunto de miles o millones de valores y quiero saber si hay un cierto valor en él?¿Hay una clase como Dictionary <> en C#, pero solo para las claves, sin valores?

He implementado este tipo de cosas en el pasado creando un Dictionary<object, int> y estableciendo el valor en 0 para cada tecla, pero esto se siente realmente anticuado. Y ahora está Stack Overflow, donde mi estúpida pregunta se puede transformar en educación para miles (docenas, incluso). ¡Asi que aqui esta!

Ni siquiera estoy seguro de lo que esa clase sería llamado, con excepción quizá de Juego, así que obviamente búsquedas en el tema han sido un reto ... :)

+0

posible duplicado de [C# Data Structure Like Dictionary pero sin un valor] (http://stackoverflow.com/questions/1363773/c-sharp-data-structure-like-dictionary-but-without-a-value) – slolife

Respuesta

56

Trate de usar la clase HashSet<T>.

Editar: Pasé mucho tiempo haciendo exactamente lo que hiciste hasta que me encontré con esta clase mientras leía un blog.

+0

+1, admití que hice lo mismo ... :) –

+2

Además, en .NET 4, esta clase ahora implementa la nueva interfaz 'ISet ', junto con su primo también nuevo 'SortedSet ', que es el mismo , pero con semántica de orden. –

+2

De vuelta en los días oscuros de .NET 1.0 y 2.0 acabamos de hacer una clase que esencialmente funcionaba como HashSet pero utilizaba un diccionario de debajo. – jjxtra

Cuestiones relacionadas