• 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();
            }
  • 相关阅读:
    c++ 中pair类模板的用法详解
    求解Catalan数,(大数相乘,大数相除,大数相加)
    POJ--2823--Sliding Window----单调队列问题
    POJ2796 Feel Good -- 单调队列
    Graham扫描法 --求凸包
    山东理工大学第七届ACM校赛-G 飞花的传送门
    NKOJ1236 a^b (数论定理的应用)
    大数相减 C语言
    SPFA ----模板 O(kE) (k一般不超过2)
    C++大数相加
  • 原文地址:https://www.cnblogs.com/flyyingzi/p/2642620.html
Copyright © 2020-2023  润新知