2016-03-22 17 views
-2

Ich möchte eine Hash-Tabelle in aufsteigender Reihenfolge des Schlüsselwerts durchlaufen, eine int ich bin zwischen 1-20.C# Iterieren durch Hashtabelle in umgekehrter Reihenfolge

Originalcode:

IDictionaryEnumerator crcEnumerator = crcHashTable.GetEnumerator(); 

while(crcEnumerator.MoveNext()) 
{ 
    // does stuff with the keys/values 
} 

, die durch die Hash-Tabelle Schleifen aber in umgekehrter Reihenfolge (20-1, anstelle von aufsteigend).

Ich versuchte

foreach(DictionaryEntry de in crcHashTable) 

zu verwenden versuchen, aber es Schleifen noch durch die Hash-Tabelle in umgekehrter Reihenfolge.

Wie kann ich in aufsteigender Reihenfolge basierend auf dem Schlüsselwert der Hash-Tabelle durchlaufen?

Danke für jede Hilfe!

+3

Gibt es Gründe, Sie Hashtable verwenden, die seit 10 Jahren veraltet ist? – usr

+3

Wenn Sie auf die Sammlung und Reihenfolge Angelegenheiten iterieren müssen, versuchen Sie eine SortedDictionary und IEnumerable. Reverse-Methode – n8wrl

+0

versuchen Sie mit einer 'for-Schleife 'und anstelle der Verwendung der' ++ 'Inkrement verwenden Sie die' - 'gibt es viele Beispiele, wie man eine 'Collection' in Reverse durchlaufen kann. Sie können diese Beispiele als Starter verwenden. – MethodMan

Antwort

0

Sie verwenden die falsche Datenstruktur. Verwenden Sie SortedDictionary statt:

Hashtable hash = new Hashtable(); 
hash[3] = "three"; 
hash[1] = "one"; 
hash[2] = "two"; 

var dictionary = hash.Cast<DictionaryEntry>().ToDictionary(kvp => (int)kvp.Key, kvp => (string)kvp.Value); 
var sorted = new SortedDictionary<int, string>(dictionary); 

So stellen Sie sicher umfassen:

using System.Collections; 
using System.Collections.Generic; 
using System.Linq;