2011-01-06 32 views
15

Duplicar posible:
Why can't I retrieve an item from a HashSet without enumeration?recuperar un objeto de hashset en C#

tengo que añadir una gran cantidad de objetos a un Set.and que debe recuperarlos muy rápido. La única forma que conozco es usar hash. Pero la clase HashSet en C# no contiene ningún método 'Get'. La clase de diccionario no es útil porque encontrar un objeto consume mucho tiempo en un diccionario.

+0

Esto podría ayudar en el futuro: http://msdn.microsoft.com/en-us/library/ms229335(v=vs.90).aspx – 5arx

+0

@Masoud: ¿Se puede publicar su código? Puede ser más fácil de reconstruir :-) –

+0

El hash devuelto por 'GetHashCode' no es único, por lo que lo que estás tratando de hacer no tiene mucho sentido. – CodesInChaos

Respuesta

12

Los HashSets se usan básicamente para comprobar si un objeto está incluido en la colección. No está ordenado ni ordenado, no tiene un índice que podría usarse para recuperar un objeto.

Si necesita almacenar y recuperar objetos, utilizar otros tipos de recolección como Lista, etc. HashTable

+3

No hay hashtable calss – Masoud

+0

Lo siento, no entiendo. Aquí es cómo puede usar una HashTable. http://support.microsoft.com/kb/309357 –

+0

Hay una clase Hashtable en System.Collections.Hashtable. http://msdn.microsoft.com/es-es/library/system.collections.hashtable.aspx –

1

El HashSet representa una serie de valores. Puede ver si un determinado valor está en el conjunto usando Contains(). Un diccionario es para almacenar objetos y recuperarlos mediante su hash (clave).

using System; 
using System.Collections.Generic; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public enum EnumA 
     { 
      One, 
      Two, 
      Three, 
      Four 
     } 

     static void Main(string[] args) 
     { 
      HashSet<EnumA> test = new HashSet<EnumA>(); 

      test.Add(EnumA.Four); 

      Console.WriteLine("Contains one:"); 
      Console.WriteLine(test.Contains(EnumA.One)); 
      Console.WriteLine("Contains four:"); 
      Console.WriteLine(test.Contains(EnumA.Four)); 
      Console.WriteLine(); 
      Console.ReadLine(); 

      return; 
     } 
    } 
}