C#中Dictionary的基本用法

     我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类。我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和拆箱的负担,如果我们操纵的数据类型相对确定的化  用 Dictionary<TKey,TValue> 集合类来存储数据就方便多了,例如我们需要在电子商务网站中存储用户的购物车信息( 商品名,对应的商品个数)时,完全可以用 Dictionary<string, int> 来存储购物车信息,而不需要任何的类型转化。

     Dictionary<string, string>是一个泛型 他本身有集合的功能有时候可以把它看成数组,他的结构是这样的Dictionary<[key], [value]>  他的特点是存入对象是需要与[key]值一一对应的存入该泛型  通过某一个一定的[key]去找到对应的值。但是它比數組更加人性化就像你去找一栋房子,用数组的话你要你一栋栋找,用dictionary的话你知道地址就直接去了,这个地址可以是数子(和数组一样了)也可以是主人的名字,或者更复杂的数据结构。

       下面是简单的例子,包括声明,填充键值对,移除键值对,遍历键值对

View Code
        static void Main(string[] args)
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("1", "何晓阳");
            dic.Add("3", "刘三云");
            dic.Add("2", "何海燕");

            //提取元素的方法 

         string a = dic["1"];
             string b = dic["2"];
         
            //上面代码中分别把值赋给了a,b,c 
           //注意,键相当于找到对应值的唯一标识,所以不能重复 
       //但是值可以重复 
            if (!dic.ContainsKey("4"))
            {
                dic.Add("4", "ddd");
            }
            else
            {
                Console.WriteLine("此键已存在");
            }
             dic["5"] = "刘帅";
            dic["6"] = "何德光";

            //解决上面的异常的方法是使用ContarnsKey() 来判断时候存在键,如果经常要取健值得化最好用 TryGetValue方法来获取集合中的对应键值
            string value = "";
            if (dic.TryGetValue("6", out value))
            {
                Console.WriteLine("存在的键\"fff\"的键值为:" + value);
            }
            else
            {
                Console.WriteLine("没有找到对应键的键值");
            }


            var result = from pair in dic orderby pair.Key select pair; //这样的一句话就达到排序的功能啦


            //下面用foreach 来遍历键值对
            //泛型结构体 用来存储健值对
            foreach (KeyValuePair<string, string> item in result)
            {
                Console.WriteLine("key={0},value={1}", item.Key, item.Value);
            }

            /* foreach (var item in dic.Values)//获取值得集合
             {
                 Console.WriteLine("value={0}", item);
             }

             Dictionary<string, string>.ValueCollection value = dic.Values;//获取值的另一种方式。
             foreach (var item in value)
             {
                 Console.WriteLine("value={0}", item);
             }*/
            Console.ReadKey();
        }
    

    注意,键相当于找到对应值的唯一标识,所以不能重复.但是值是可以重复的。如果你还看不懂我最后给你举一个通俗的例子.有一缸米,你想在在每一粒上都刻上标记,不重复,相当于“键”当你找的时候一一对应不会找错,这就是这个泛型的键的-作用,而米可以一样,我的意思你明白了吧?

HashTable其實也差不多,與Dictionary非常類似。

View Code
        static void Main()
        {
            Hashtable ht = new Hashtable();
            ht.Add(1, "何晓阳");
            ht.Add(2, "劉三云");

            foreach (DictionaryEntry item in ht)
            {
                Console.WriteLine("key={0},value={1}", item.Key, item.Value);
            }
            Console.ReadKey();
        }

 

posted @ 2012-08-16 16:45  Flyyingzi77  阅读(551)  评论(0编辑  收藏  举报