2011-01-06 21 views
15

Eventuali duplicati:
Why can't I retrieve an item from a HashSet without enumeration?recuperare un oggetto da hashset in C#

ho bisogno di aggiungere un sacco di oggetti a un Set.and dovrei recuperarli molto veloce. L'unico modo che conosco è usare l'hash. Ma la classe HashSet in C# non contiene alcun metodo 'Get'. La classe del dizionario non è utile perché trovare un oggetto richiede molto tempo in un dizionario.

+0

Questo potrebbe aiutare in futuro: http://msdn.microsoft.com/en-us/library/ms229335(v=vs.90).aspx – 5arx

+0

@Masoud: Puoi pubblicare il codice? Potrebbe essere più facile ricostruire :-) –

+0

L'hash restituito da 'GetHashCode' non è univoco, quindi quello che stai cercando di fare non ha molto senso. – CodesInChaos

risposta

12

Gli hash sono fondamentalmente utilizzati per verificare se un oggetto è incluso nella raccolta. È non ordinato e non ordinato, non ha un indice che potrebbe essere usato per riattivare un oggetto.

Se avete bisogno di memorizzare e recuperare gli oggetti, utilizzare altri tipi di raccolta come List, HashTable ecc

+3

Non ci sono hashtable calss – Masoud

+0

Mi dispiace, non capisco. Ecco come puoi usare una HashTable. http://support.microsoft.com/kb/309357 –

+0

Esiste una classe Hashtable in System.Collections.Hashtable. http://msdn.microsoft.com/es-es/library/system.collections.hashtable.aspx –

1

Il HashSet rappresenta un numero di valori. Puoi controllare se un certo valore è nel set usando Contains(). Un dizionario è per la memorizzazione di oggetti e il recupero tramite il suo hash (chiave).

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; 
     } 
    } 
} 
Problemi correlati