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即可进行处理,不用理会使用者用得是何种类型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章