C# Dictionary用法总结

编程入门 行业动态 更新时间:2024-10-25 18:24:11

C# Dictionary用法总结

Posted on  2011-12-09 18:06  work hard work smart 阅读( 69002) 评论( 3)  编辑  收藏

C# Dictionary用法总结

1、用法1: 常规用

  增加键值对之前需要判断是否存在该键,如果已经存在该键而且不判断,将抛出异常。所以这样每次都要进行判断,很麻烦,在备注里使用了一个扩展方法

public  static  void  DicSample1() {        Dictionary<String, String> pList = new  Dictionary<String, String>();      try      {          if  (pList.ContainsKey( "Item1" ) == false )          {              pList.Add( "Item1" , "ZheJiang" );          }          if  (pList.ContainsKey( "Item2" )== false )          {              pList.Add( "Item2" , "ShangHai" );          }          else          {              pList[ "Item2" ] = "ShangHai" ;          }          if  (pList.ContainsKey( "Item3" ) == false )          {              pList.Add( "Item3" , "BeiJiang" );          }                }      catch  (System.Exception e)      {          Console.WriteLine( "Error: {0}" , e.Message);      }            //判断是否存在相应的key并显示      if  (pList.ContainsKey( "Item1" ))      {          Console.WriteLine( "Output: "  + pList[ "Item1" ]);      }        //遍历Key      foreach  ( var  key in  pList.Keys)      {          Console.WriteLine( "Output Key: {0}" , key);      }        //遍历Value      foreach  (String value in  pList.Values)      {          Console.WriteLine( "Output Value: {0}" , value);      }      //遍历Key和Value      foreach  ( var  dic in  pList)      {          Console.WriteLine( "Output Key : {0}, Value : {1} " , dic.Key, dic.Value);      } }

  

  2、用法2:Dictionary的Value为一个数组

/// <summary> /// Dictionary的Value为一个数组 /// </summary>   public  static  void  DicSample2()   {       Dictionary<String, String[]> dic = new  Dictionary<String, String[]>();       String[] ZheJiang =  { "Huzhou" , "HangZhou" , "TaiZhou"  };       String[] ShangHai = { "Budong" , "Buxi"  };       dic.Add( "ZJ" , ZheJiang);       dic.Add( "SH" , ShangHai);       Console.WriteLine( "Output :"  + dic[ "ZJ" ][0]);   }

  3、用法3: Dictionary的Value为一个类

//Dictionary的Value为一个类 public  static  void  DicSample3()   {       Dictionary<String, Student> stuList = new  Dictionary<String, Student>();       Student stu = null ;       for  ( int  i = 0; i < 3; i++ )       {           stu = new  Student();           stu.Name = i.ToString();           stu.Name = "StuName"  + i.ToString();           stuList.Add(i.ToString(), stu);       }         foreach  ( var  student in  stuList)       {           Console.WriteLine( "Output : Key {0}, Num : {1}, Name {2}" , student.Key, student.Value.Name, student.Value.Name);       }   }

  

Student类:

public  class  Student {      public  String Num { get ; set ; }      public  String Name { get ; set ; } }

  

 4 备注:Dictionary的扩展方法使用

 

/// <summary> /// Dictionary的扩展方法使用 /// </summary>   public  static  void  DicSample4()   {       //1)普通调用       Dictionary< int , String> dict = new  Dictionary< int , String>();       DictionaryExtensionMethodClass.TryAdd(dict, 1, "ZhangSan" );       DictionaryExtensionMethodClass.TryAdd(dict, 2, "WangWu" );       DictionaryExtensionMethodClass.AddOrPeplace(dict, 3, "WangWu" );       DictionaryExtensionMethodClass.AddOrPeplace(dict, 3, "ZhangWu" );       DictionaryExtensionMethodClass.TryAdd(dict, 2, "LiSi" );         //2)TryAdd 和 AddOrReplace 这两个方法具有较强自我描述能力,用起来很省心,而且也简单:       dict.AddOrPeplace(20, "Orange" );       dict.TryAdd(21, "Banana" );       dict.TryAdd(22, "apple" );         //3)像Linq或jQuery一样连起来写         dict.TryAdd(10, "Bob" )           .TryAdd(11, "Tom" )           .AddOrPeplace(12, "Jom" );         //4) 获取值       String F = "Ba" ;       dict.TryGetValue(31, out  F);       Console.WriteLine( "F : {0}" ,F);         foreach  ( var  dic in  dict)       {           Console.WriteLine( "Output : Key : {0}, Value : {1}" , dic.Key, dic.Value);       }       //5)下面是使用GetValue获取值       var  v1 = dict.GetValue(111, null );       var  v2 = dict.GetValue(10, "abc" );         //6)批量添加       var  dict1 = new  Dictionary< int , int >();       dict1.AddOrPeplace(3, 3);       dict1.AddOrPeplace(5, 5);         var  dict2 = new  Dictionary< int , int >();       dict2.AddOrPeplace(1, 1);       dict2.AddOrPeplace(4, 4);       dict2.AddRange(dict1, false );   }

  扩展方法所在的类

public  static  class  DictionaryExtensionMethodClass {      /// <summary>      /// 尝试将键和值添加到字典中:如果不存在,才添加;存在,不添加也不抛导常      /// </summary>      public  static  Dictionary<TKey, TValue> TryAdd<TKey, TValue>( this  Dictionary<TKey, TValue> dict, TKey key, TValue value)      {          if  (dict.ContainsKey(key) == false )              dict.Add(key, value);          return  dict;      }        /// <summary>      /// 将键和值添加或替换到字典中:如果不存在,则添加;存在,则替换      /// </summary>      public  static  Dictionary<TKey, TValue> AddOrPeplace<TKey, TValue>( this  Dictionary<TKey, TValue> dict, TKey key, TValue value)      {          dict[key] = value;          return  dict;      }        /// <summary>      /// 获取与指定的键相关联的值,如果没有则返回输入的默认值      /// </summary>      public  static  TValue GetValue<TKey, TValue>( this  Dictionary<TKey, TValue> dict, TKey key, TValue defaultValue)      {          return  dict.ContainsKey(key)?dict[key] : defaultValue;      }        /// <summary>      /// 向字典中批量添加键值对      /// </summary>      /// <param name="replaceExisted">如果已存在,是否替换</param>      public  static  Dictionary<TKey, TValue> AddRange<TKey, TValue>( this  Dictionary<TKey, TValue> dict, IEnumerable<KeyValuePair<TKey, TValue>> values, bool  replaceExisted)      {          foreach  ( var  item in  values)          {              if  (dict.ContainsKey(item.Key) == false  || replaceExisted)                  dict[item.Key] = item.Value;          }          return  dict;      }     }

更多推荐

C# Dictionary用法总结

本文发布于:2023-06-14 09:47:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1462937.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Dictionary

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!