2011-01-06 28 views
15

Mögliche Duplizieren:
Why can't I retrieve an item from a HashSet without enumeration?Abrufen eines Objekts aus Hashset in C#

Ich brauche eine Menge von Objekten zu einem Set.and hinzufügen ich sie sehr schnell abgerufen werden. Der einzige Weg, den ich kenne, ist die Verwendung von Hash. Aber die HashSet-Klasse in C# enthält keine Get-Methode. Die Wörterbuchklasse ist nicht nützlich, da das Suchen eines Objekts in einem Wörterbuch sehr zeitaufwendig ist.

+0

Diese in Zukunft helfen könnten: http://msdn.microsoft.com/en-us/library/ms229335(v=vs.90).aspx – 5arx

+0

@Masoud: Können Sie Ihren Code veröffentlichen? Könnte einfacher zu rekonstruieren sein :-) –

+0

Der von 'GetHashCode' zurückgegebene Hash ist nicht eindeutig, also macht das, was du versuchst, nicht viel Sinn. – CodesInChaos

Antwort

12

HashSets werden grundsätzlich verwendet, um zu testen, ob ein Objekt in der Sammlung enthalten ist. Es ist nicht geordnet und nicht sortiert, hat keinen Index, der zum Auffinden eines Objekts verwendet werden könnte.

Wenn Sie Objekte zu speichern und abzurufen, verwenden andere Sammlungstypen wie List, HashTable usw.

+3

Es gibt keine hashtable calss – Masoud

+0

Es tut mir leid, ich verstehe nicht. Hier können Sie eine HashTable verwenden. http://support.microsoft.com/kb/309357 –

+0

Es gibt eine Hashtable-Klasse in System.Collections.Hashtable. http://msdn.microsoft.com/es-es/library/system.collections.hashtable.aspx –

1

Die HashSet eine Anzahl von Werten darstellt. Sie können sehen, ob ein bestimmter Wert in der Menge ist, indem Sie Contains() verwenden. Ein Dictionary dient zum Speichern von Objekten und zum Abrufen von Objekten anhand ihres Hashs (Schlüssels).

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