Dienstag, 3. Juni 2008

Hashtable in Key Reihenfolge abarbeiten

Ich hatte in einer Hashtable Strings mit einem Integer Wert als Key abgelegt und wollte die nun in numerischer Folge abarbeiten, mein erster gedankenloser Ansatz war etwas umständlich. Mit etwas nachdenken hatte ich einen eleganteren Weg gefunden.

Dazu hab ich ersteinmal die Hashtable in ein generisches Dictionary umgewandelt, dann die Keys in eine generische Liste geschaufelt und dann einfach den Sort angewendet. Natürlich hätte dies auch mit einer Hashtable und einer Arraylist funktioniert, aber da beide in jeder Hinsicht in der Performance den Generics unterlegen sind hab ich das umgeschrieben nach diesem Beispiel:

   1:  ...
   2:  Dictionary<int, string> ht = new Dictionary<int, string>(10);
   3:  ht.Add(1, "hallo");
   4:  ht.Add(2, "welt");
   5:  ht.Add(3, "!");
   6:  ...
   7:             
   8:  List<int> keys = new List<int>(ht.Keys);
   9:  keys.Sort();
  10:   
  11:  foreach (int k in keys)
  12:  {
  13:     System.Console.WriteLine("key = " + k.ToString() + " value = " + (string)ht[k]);
  14:  }
  15:  ...

Das funktioniert dann auch analog mit anderen Datentypen, ggf. muss dann der Comparer implementiert/überladen werden, je nach Geschmack :)

Keine Kommentare: