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("\t{0}\t{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();
}

 

posted @ 2014-01-11 17:42  逍遥散人95  阅读(3944)  评论(0编辑  收藏  举报