C#集合之四Dictionary

     Dictionary是.net2.0中新加入的一個類,是一個泛型類。通常我們可以用ArrayList,Queue,hashtable來存儲不同類型的數據,但這些原因都是因爲ArrayList,Queue和HashTable實際上封裝的是Object類型的值,當我們存儲不同的值的時候,系統會自動將其進行封箱,拆箱操作。以上說來,這些有點類似於php等弱類型語言。而Dictionary則可以將數據的類型推遲到客戶端代碼處理,這裏就不累述(以後會詳細瞭解一下泛型類的特點以及用法)

     接下來直接看代碼:

    

 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4
 5using System.Collections;
 6
 7namespace Practice
 8{
 9    public class Cs_Dictionary
10    {
11        private Dictionary<object,object> myDictionary = null;
12
13        public Cs_Dictionary()
14        {
15            myDictionary = new Dictionary<objectobject>();
16            myDictionary.Add("key2",2);
17            myDictionary.Add("key1"1);
18            myDictionary.Add("key3""a");
19            myDictionary.Add("key4""b");
20        }

21
22        public Cs_Dictionary(Dictionary<object,object> _myDictionary)
23        {
24            myDictionary = _myDictionary;
25        }

26
27        public void PrintDictionary()
28        {
29            //Dictionary排序,Dictionary本身是一個無序的集合,檢索其中的信息時輸出的順序是按照添加時的順序輸出的。
30            Console.WriteLine("Print element in the Dictionary:");
31            foreach(KeyValuePair<object,object> keyPair in myDictionary)
32            {
33                Console.Write("{0}:{1}/n",keyPair.Key,keyPair.Value);
34            }

35        
36            //如果排序的話,可以通過其他的方式來實現,例如ArrayList
37            
38            ICollection collection = myDictionary.Keys;
39            ArrayList al = new ArrayList(collection);
40            //按照升序進行排列
41            al.Sort(new MyComparer(true));
42            Console.Write("Print element with descing sort:/n");
43            foreach (object obj in al)
44            {
45                Console.Write("{0}:{1}/n", obj.ToString(), myDictionary[obj]);
46            }

47
48            //按照降序進行排列
49            al.Sort(new MyComparer(false));
50            Console.Write("Print element with ascing sort:/n");
51            foreach (object obj in al)
52            {
53                Console.Write("{0}:{1}/n", obj.ToString(), myDictionary[obj]);
54            }

55            Console.ReadLine();
56        }

57
58        public class MyComparer : IComparer
59        {
60            private int sort;
61
62            //如果fl爲true,說明是升序排列,否則按照降序進行排列
63            public MyComparer(bool fl)
64            {
65                if (fl)
66                {
67                    Sort = 1;
68                }

69                else
70                {
71                    Sort = -1;
72                }

73            }

74
75            public int Sort
76            {
77                get{return sort;}
78                set{sort=value;}
79            }

80
81            public int Compare(object x, object y)
82            {
83                return new CaseInsensitiveComparer().Compare(x.ToString(),y.ToString())*Sort;
84            }

85        }

86
87    }

88}
調用方式:
Code
關於Dictionary的一個疑問,我們在使用Dictionary<TKey,TValue>時,還是必須先明確其類型。如果是這樣,如果在TestDictionary()方法中項初始化一個Dictionary<Int32,Int32>的集合時,相應的在Cs_Dictionary類中就必須有對應類型的Dictionary來進行接收處理。感覺這段好像太繁瑣,不知道是不是個人理解有誤的原因。如果能有一個統一的類型來代替具體的類型,那麼在TestDictionary()方法中無論定義那種類型,在Cs_Dictionary類中用一個Dictionary即可進行處理,不用理會使用者用得是何種類型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章