欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#泛型集合Dictionary的使用方法

程序员文章站 2023-12-17 23:45:10
1、要使用dictionary集合,需要导入c#泛型命名空间   system.collections.generic(程序集:mscorlib) 2、描述    1...

1、要使用dictionary集合,需要导入c#泛型命名空间

  system.collections.generic(程序集:mscorlib)

2、描述

   1)、从一组键(key)到一组值(value)的映射,每一个添加项都是由一个值及其相关连的键组成
   2)、任何键都必须是唯一的
   3)、键不能为空引用null(vb中的nothing),若值为引用类型,则可以为空值
   4)、key和value可以是任何类型(string,int,custom class 等)

3、创建及初始化

复制代码 代码如下:

   dictionary<int, string> mydictionary = new dictionary<int, string>();

4、添加元素

复制代码 代码如下:

   mydictionary.add("c#",0);
   mydictionary.add("c++",1);
   mydictionary.add("c",2);
   mydictionary.add("vb",2);

5、查找元素by key

复制代码 代码如下:

  if(mydictionary.containskey("c#"))
  {
    console.writeline("key:{0},value:{1}", "c#", mydictionary["c#"]);
  }

6.遍历元素 by keyvaluepair

复制代码 代码如下:

  foreach (keyvaluepair<string, int> kvp in mydictionary)
  {
    console.writeline("key = {0}, value = {1}",kvp.key, kvp.value);
  }

7、仅遍历键 by keys 属性

复制代码 代码如下:

  dictionary<string, int>.keycollection keycol = mydictionary.keys;
  foreach (string key in keycol/*string key in mydictionary.keys*/)
  {
    console.writeline("key = {0}", key);
  }

8、仅遍历值by valus属性

复制代码 代码如下:

  dictionary<string, int>.valuecollection valuecol = mydictionary.values;
  foreach (int value in valuecol)
  {
    console.writeline("value = {0}", value);
  }

9.移除指定的键值by remove方法

复制代码 代码如下:

  mydictionary.remove("c#");
  if (mydictionary.containskey("c#"))
  {
    console.writeline("key:{0},value:{1}", "c#", mydictionary["c#"]);
  }
  else
  {
    console.writeline("不存在 key : c#");
      }

在system.collections.generic命名空间中,与arraylist相对应的泛型集合是list<t>,与 hashtable相对应的泛型集合是dictionary<k,v>,其存储数据的方式与哈希表相似,通过键/值来保存元素,并具有泛型的全部特征,编译时检查类型约束,读取时无须类型转换。

电话本存储的例子中,使用dictionary<k,v>来存储电话本信息,代码如下:

复制代码 代码如下:

dictionary<string,telnote> ht=new dictionary<string,telnote>();

在dictionary<k,v>声明中,“<string,telnote>”中的string表示集合中key的类型,telnote表示value的类型,定义dictionary<k,v>泛型集合中的方法如下:

复制代码 代码如下:

dictionary<k,v> students=new dictionary<k,v>();

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

dictionary<k,v>中元素的操作方法与hashtable相似,添加元素,获取元素,删除元素,遍历集合元素的方法基本相同。

dictionary<k,v>和hashtable的区别
dictionary<k,v>和hashtable的相同点:添加元素,删除元素,通过键访问值的方法相同。
dictionary<k,v>和hashtable的不同点:
dictionary<k,v>对添加的元素具有类型约束,hashtable可添加任意类型的元素。
dictionary<k,v>不需要装箱、拆箱操作,hashtable添加时装箱,读取时拆箱。

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

复制代码 代码如下:

using system;
using system.collections.generic;
class program
{
static void main()
{
   //创建dictionary<k,v>,然后添加元素
   dictionary < string, string > film = new dictionary < string, string > ();
   film.add("韦小宝", "鹿鼎记");
   film.add("陆小凤", "陆小凤传奇");
   film.add("张无忌", "倚天屠龙记");
   film.add("杨过", "神雕侠侣");
   film.add("令狐冲", "笑傲江湖");
   console.writeline("集合现在的元素个数为{0}", film.count);
   film.remove("杨过");
   //遍历集合
   console.writeline("武侠电影的主角及电影名");
   console.writeline("/t主角/t电影");
   foreach (keyvaluepair < string, string > kvp in film)
   {
    console.writeline("/t{0}/t{1}", kvp.key, kvp.value);
   }
   //检查元素是否存在,如不存在,添加
   if (!film.containskey("段誉"))
   {
    film.add("段誉", "天龙八部");
   }
   //获取键的集合
   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 strfilm in values)
   {
    console.writeline(strfilm);
   }
   //遍历元素的另一种方法
   console.writeline("和哈希表相同的遍历元素方法");
   foreach (string strname in film.values)
   {
    console.writeline(strname);
   }
   //获取键对应的值
   string myfilm = film["令狐冲"];
   console.writeline("主角为令狐冲的电影名{0}", myfilm);
   //获取键对应值的trygetvalue方法
   string objfilm = string.empty;
   if (film.trygetvalue("段誉", out objfilm))
   {
    console.writeline("主角为段誉的电影是{0}", objfilm);
   }
   else
    console.writeline("没有主角为段誉的电影");
   console.readkey();
}
}

代码创建了一个dictionary<k,v>集合,键和值的数据类型是string类型,后边代码的元素添加,删除都和哈希表处理方法相同,遍历元素时不需要进行数据类型强制转换。dictionary<k,v>通过键取值的trygetvalue方法,此方法包括两个参数,一个是要查询的键,另一个是获取的值,注意值前面使用out关键字。

注意:使用trygetvalue方法时,参数一定要使用out关键字,否则编译失败。

上一篇:

下一篇: