zoukankan      html  css  js  c++  java
  • 1.C#泛型-泛型集合Dictionary<Key,Value>

         Dictionary<Key,Value>是一个泛型,它本身有集合的功能有时候可以它看成是数组,它的结构是这样的:Dictionary<[Key],[Value]>,它的特点是存入对象需要与[Key]值一一对应的存入该泛型,通过某一个一定的[Key]去找到对应的值[Key]不能重复。它的单个数组是KeyValuePair<Key,Value>,[Value]可以是string,int 和一个类等等。

          在System.Collections.Generic命名空间中,与ArrayList相对应的泛型集合是List<T>,与HashTable相对应的泛型集合是Dictionary<Key,Value>,其存储数据方式与哈希表相似,通过键/值来保存元素,并具有泛型的全部特征,编译时检查类型约束,读取时无需类型转换。

    Dictionary<Key,Value> student = new Dictionary<Key,Value>();

          其中“K”为占位符,具体定义时用存储键“Key”的数据类型代替,“Value”也是占位符,用元素的值“Value”的数据类型代替,这样就在定义该集合时,声明了存储元素的键和值的数据类型,保证了类型的安全性。

          Dictionary<Key,Value>中元素的操作方法与HashTable相似,添加元素,获取元素,删除元素,遍历集合元素的方法基本相同。

          Dictionary<Key,Value>和HashTable的区别

          Dictionary<Key,Value>和HashTable的相同点:添加元素,删除元素,通过键访问值的方法相同。

          Dictionary<Key,Value>和HashTable的不同点:

          Dictionary<Key,Value>对添加的元素具有类型约束,HashTable可添加任意类型的元素。

          Dictionary<Key,Value>不需要装箱、拆箱操作,HashTable添加时装箱,读取时拆箱。

          Dictionary<Key,Value>集合中,除了通过键获取值得方法外,还有一种TryGetValue(Key)方法,可以通过键获取值,该方法返回值为布尔型,如果存在和键相对应的值,则返回true,否则返回false。避免了因获取不到相应值发生的异常。

          代码示例:      

    public static void Main(string[] args)
    {
         //创建Dictionary<K,V>然后添加元素
         Dictionary<string, string> film = new Dictionary<string, string>();
         film.Add("杨过", "神雕侠侣");
         film.Add("聂风", "雄霸天下");
         film.Add("令狐冲", "笑傲江湖");
         film.Add("张无忌", "倚天屠龙记");
         Console.WriteLine("集合现在的元素个数为:{0}", film.Count);

         //检查元素是否存在,如不存在,添加
         if (!film.ContainsKey("段誉"))
         {
             film.Add("段誉", "天龙八部");
         }

          //遍历集合
          foreach (KeyValuePair<string, string> kvp in film)
         {
             Console.WriteLine(" {0} {1}", kvp.Key, kvp.Value);
         }

          //获取键的集合
          Dictionary<string, string>.KeyCollection keys = film.Keys;
          //遍历键的集合
          Console.WriteLine("受欢迎的武侠片中主角名:");
          foreach (string str in keys)
         {
               Console.WriteLine(str);
          }

          //获取值的集合
          Dictionary<string, string>.ValueCollection values = film.Values;
          //遍历值的集合
          Console.WriteLine("受欢迎的武侠片:");
          foreach (string strName in values)
          {
                Console.WriteLine(strName);
          }

          //遍历元素的另一种方法
          Console.WriteLine("和哈希表相同的遍历<值>元素方法");
          foreach (string strName in film.Values)
          {
                 Console.WriteLine(strName);
           }
           Console.WriteLine("和哈希表相同的遍历<键>元素方法");
           foreach (string str in film.Keys)
          {
               Console.WriteLine(str);
           }

          //获取键对应值的TryGetValue方法
          string objfilm = string.Empty;
          if (film.TryGetValue("段誉", out objfilm))
          {
                 Console.WriteLine("主角为段誉的电影是:{0}", objfilm);
           }
           else
          {
                 Console.WriteLine("没有主角为段誉的电影");
           }
          Console.ReadKey();
    }

  • 相关阅读:
    《笨办法学python》 第14课手记
    《笨办法学Python》 第13课手记
    杭电2009----求数列的和
    杭电2008----数值统计
    杭电2007----平方和与立方和
    杭电2006----求奇数的乘积
    杭电2005----第几天?
    杭电2004---- 成绩转换
    杭电2003----求绝对值
    杭电2002----计算球体积
  • 原文地址:https://www.cnblogs.com/xiaoyao095/p/Dictionary.html
Copyright © 2011-2022 走看看