天天看點

Hashtable 排序

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