2011-01-07 11 views

Antwort

2

Eine Hashtabelle erzwingt keine Reihenfolge. Im Allgemeinen erzwingt die Liste die Anzeigenreihenfolge. Sie können versuchen, List<T> zu verwenden und KeyValuePair<K,V> einzufügen, wenn Sie die Schlüsselwertpaare benötigen. Wenn Sie wirklich ein Wörterbuch benötigen, können Sie versuchen, die Klasse SortedDictionary<K,V> zu verwenden.

+1

'' SortedDictionary nicht auf Insertion Reihenfolge sortiert ist, wird es auf dem Schlüssel unter Verwendung eines (optional) '' IComparer sortiert. – LukeH

+0

@LukeH, du hast vollkommen recht; hatte für eine Sekunde ein Hirn furzen. Bearbeitete Antwort, um das zu reflektieren. –

0

Eine Hash-Tabelle sortiert ihre Elemente nach dem Hash des Schlüssels, nicht nach der Reihenfolge, in der sie zur Hash-Tabelle hinzugefügt werden.

1

Die Reihenfolge der Aufzählung auf HashTable, HashSet<T>, Dictionary<T> usw. ist nicht spezifiziert. In typischen Implementierungen werden die Elemente in Slots platziert, die für die Erstellung einer effizienten Hash-Tabelle geeignet sind.

Es wird nicht versucht, die Reihenfolge beizubehalten, in der Elemente hinzugefügt wurden.

Die Klasse HashSet<T> bietet leistungsstarke Set-Operationen. Eine Menge ist eine Sammlung, die keine doppelten Elemente enthält und deren Elemente keine bestimmte Reihenfolge haben.

0

Das Problem mit Generic SortedList wurde behoben. Danke für alle, die geholfen haben.

0

**

Die Reihenfolge der Auflistung Keys Element gespeichert wurde auf den Schlitz der Schlüssel des basiert. Der Slot, in dem ein Element gespeichert wird, hängt vom Hashwert und der Kollisionslösungsstrategie des Schlüssels ab.

**

Um ein Element aus der Hashtable abzurufen, können Sie Index der Hashtable durch den Schlüssel, wie nur würden Sie Index ein Array von einem Ordnungswert. Das folgende kurze C# -Programm demonstriert dieses Konzept. Es fügt einer Hashtable eine Anzahl von Elementen hinzu, indem jedem Element ein Zeichenfolgenschlüssel zugeordnet wird. Dann kann auf das bestimmte Element unter Verwendung seines Zeichenfolgenschlüssels zugegriffen werden.

mit System; mit System.Collections;

öffentliche Klasse HashtableDemo { private statische Hashtable-Mitarbeiter = neue Hashtable();

public static void Main() 
{ 
    // Add some values to the Hashtable, indexed by a string key 
    employees.Add("111-22-3333", "Scott"); 
    employees.Add("222-33-4444", "Sam"); 
    employees.Add("333-44-55555", "Jisun"); 

    // Access a particular key 
    if (employees.ContainsKey("111-22-3333")) 
    { 
     string empName = (string) employees["111-22-3333"]; 
     Console.WriteLine("Employee 111-22-3333's name is: " + empName); 
    } 
    else 
     Console.WriteLine("Employee 111-22-3333 is not in the hash table..."); 
} 

} Dieser Code zeigt auch die ContainsKey() -Methode, die einen Boolean zurück, der angibt, ob eine bestimmte Taste in der Hashtable gefunden wurde. Die Hashtable-Klasse enthält eine Keys-Eigenschaft, die eine Auflistung der in der Hashtable verwendeten Schlüssel zurückgibt.Diese Eigenschaft kann verwendet werden, um die Elemente in einer Hashtable aufzuzählen, wie unten dargestellt:

// Schritt durch alle Elemente in der Hashtable foreach (string Schlüssel in employees.Keys) Console.WriteLine ("Value-at-Mitarbeitern [ \ "" + key + "\"] = "+ employees [key] .ToString()); Stellen Sie fest, dass die Reihenfolge, in der die Elemente eingefügt werden, und die Reihenfolge der Schlüssel in der Keys-Auflistung nicht unbedingt identisch sind. Die Reihenfolge der Keys-Auflistung basiert auf dem Steckplatz, in dem der Schlüssel gespeichert wurde. Der Slot, in dem ein Element gespeichert wird, hängt vom Hashwert und der Kollisionslösungsstrategie des Schlüssels ab. Wenn Sie den obigen Code ausführen, können Sie sehen, dass die Reihenfolge, in der die Elemente aufgelistet werden, nicht unbedingt mit der Reihenfolge übereinstimmt, mit der die Elemente zur Hashtabelle hinzugefügt wurden. Ausführen der oben genannten Code-Ausgänge:

Wert an Mitarbeiter [ "333-44-5555"] = Jisun Value at Mitarbeiter [ "111-22-3333"] = Scott Value at Mitarbeiter [ "222-33-4444 "] = Sam Obwohl die Daten in der Hashtable in der Reihenfolge" Scott "," Sam "," Jisun "eingefügt wurden.

http://msdn.microsoft.com/en-us/library/ms379571(v=vs.80).aspx