Hashtable本身并沒有排序功能,相對來說,它的主要優點在于快速查找。
但有的時候我們也需要對Hashtable裡面的元素進行排序,這就需要變通的方法來實作。
大家都知道:ArrayList它有一個Sort()方法,可以将裡面的元素進行排序,試想如果将Hashtable裡面的元素導入到ArrayList裡面,然後再進行排序,這倒是一個不錯的想法,現在我們加以實作:
Hashtable 排序 using System;
Hashtable 排序 using System.Collections;
Hashtable 排序
Hashtable 排序 namespace PublicBill.HashtableSort
Hashtable 排序
Hashtable 排序
Hashtable 排序 {
Hashtable 排序 public class HashtableSort
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 public static void Main()
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 string myString = "1,AAA;2,BBB;3,CCC";
Hashtable 排序 string[] myStringArray = myString.Split(';');
Hashtable 排序 string[] mySubStringArray;
Hashtable 排序 Hashtable ht = new Hashtable();
Hashtable 排序 foreach(string str in myStringArray)
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 mySubStringArray = str.Split(',');
Hashtable 排序 ht.Add(mySubStringArray[0], mySubStringArray[1]);
Hashtable 排序 }
Hashtable 排序
Hashtable 排序 Console.WriteLine("Hashtable before sort.");
Hashtable 排序 foreach(DictionaryEntry de in ht)
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 Console.WriteLine("{0}: {1}", de.Key, de.Value);
Hashtable 排序
Hashtable 排序
Hashtable 排序 ArrayList al = new ArrayList(ht.Keys);
Hashtable 排序 al.Sort();
Hashtable 排序 Console.WriteLine();
Hashtable 排序
Hashtable 排序 Console.WriteLine("Hashtable after sort.");
Hashtable 排序 foreach(string key in al)
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 Console.WriteLine("{0}: {1}", key, ht[key]);
Hashtable 排序
Hashtable 排序 }
Hashtable 排序 }
Hashtable 排序 }
程式運作結果見圖一:
Hashtable 排序
Hashtable 排序 排序完成了,但是像圖二那樣,要實作反向排序(倒序)該如何操作?
好像ArrayList裡面也就僅僅提供了一個Sort()方法,沒有提供給我們直接倒序的方法,
廢話少說,見如下代碼:
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 ArrayList al = new ArrayList(ht);
Hashtable 排序 CustomComparer comparer = new CustomComparer();
Hashtable 排序 al.Sort(comparer);
Hashtable 排序
Hashtable 排序 Console.WriteLine(); //Print a empty line.
Hashtable 排序
Hashtable 排序 Console.WriteLine("Hashtable after order by desc.");
Hashtable 排序 foreach(DictionaryEntry de in al)
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 public class CustomComparer : IComparer
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 public int Compare(object x, object y)
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 int r = 0;
Hashtable 排序
Hashtable 排序 if (x is DictionaryEntry && y is DictionaryEntry)
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 DictionaryEntry a = (DictionaryEntry)x;
Hashtable 排序 DictionaryEntry b = (DictionaryEntry)y;
Hashtable 排序
Hashtable 排序 if (a.Key is IComparable)
Hashtable 排序
Hashtable 排序
Hashtable 排序
Hashtable 排序 //If you want sort asc,only need remove "-".
Hashtable 排序 r = -((IComparable)a.Key).CompareTo(b.Key);
Hashtable 排序 }
Hashtable 排序
Hashtable 排序
Hashtable 排序 return r;
Hashtable 排序
Hashtable 排序
Hashtable 排序 程式運作結果見圖二。 說 明: 如果你想實作升序,隻需要把 r = -((IComparable)a.Key).CompareTo(b.Key); 前面的負号去掉, 改為: r = ((IComparable)a.Key).CompareTo(b.Key); |