泛型Dictionary的用法详解

泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱。

很多非泛型集合类都有对应的泛型集合类,下面是常用的非泛型集合类以及对应的泛型集合类:

非泛型集合类 泛型集合类 ArrayList List<T> HashTable DIctionary<T> Queue Queue<T> Stack Stack<T> SortedList SortedList<T>

我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类。我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和拆箱的负担,如果我们操纵的数据类型相对确定的化  用 Dictionary<TKey,TValue> 集合类来存储数据就方便多了,例如我们需要在电子商务网站中存储用户的购物车信息( 商品名,对应的商品个数)时,完全可以用 Dictionary<string, int> 来存储购物车信息,而不需要任何的类型转化。

下面是简单的例子,包括声明,填充键值对,移除键值对,遍历键值对

Dictionary<string, string> myDic = new Dictionary<string, string>();

    myDic.Add("aaa", "111");

    myDic.Add("bbb", "222");

    myDic.Add("ccc", "333");

    myDic.Add("ddd", "444");

    //如果添加已经存在的键,add方法会抛出异常

    try

    {

        myDic.Add("ddd","ddd");

    }

    catch (ArgumentException ex)

    {

        Console.WriteLine("此键已经存在:" + ex.Message);

    }

    //解决add()异常的方法是用ContainsKey()方法来判断键是否存在

    if (!myDic.ContainsKey("ddd"))

    {

        myDic.Add("ddd", "ddd");

    }

    else

    {

        Console.WriteLine("此键已经存在:");

    }

    //而使用索引器来负值时,如果建已经存在,就会修改已有的键的键值,而不会抛出异常

    myDic ["ddd"]="ddd";

    myDic["eee"] = "555";

    //使用索引器来取值时,如果键不存在就会引发异常

    try

    {

        Console.WriteLine("不存在的键""fff""的键值为:" + myDic["fff"]);

    }

    catch (KeyNotFoundException ex)

    {

        Console.WriteLine("没有找到键引发异常:" + ex.Message);

    }

    //解决上面的异常的方法是使用ContarnsKey() 来判断时候存在键,如果经常要取健值得化最好用 TryGetValue方法来获取集合中的对应键值

    string value = "";

    if (myDic.TryGetValue("fff", out value))

    {

        Console.WriteLine("不存在的键""fff""的键值为:" + value );

    }

    else

    {    

        Console.WriteLine("没有找到对应键的键值");

    }

    //下面用foreach 来遍历键值对

    //泛型结构体 用来存储健值对

    foreach (KeyValuePair<string, string> kvp in myDic)

    {

        Console.WriteLine("key={0},value={1}", kvp.Key, kvp.Value);

    }

    //获取值得集合

    foreach (string s in myDic.Values)

    {

        Console.WriteLine("value={0}", s);

    }

    //获取值得另一种方式

    Dictionary<string, string>.ValueCollection values = myDic.Values;

    foreach (string s in values)

    {

        Console.WriteLine("value={0}", s);

    }

常用的属性和方法如下:

 
常用属性


属性说明

 
Comparer


获取用于确定字典中的键是否相等的 IEqualityComparer。

 
Count


获取包含在 Dictionary中的键/值对的数目。

 
Item


获取或设置与指定的键相关联的值。

 
Keys


获取包含 Dictionary中的键的集合。

 
Values


获取包含 Dictionary中的值的集合。

  常用的方法 方法说明
 
Add


将指定的键和值添加到字典中。

 
Clear


从 Dictionary中移除所有的键和值。


ContainsKey


确定 Dictionary是否包含指定的键。

 
ContainsValue


确定 Dictionary是否包含特定值。

 
Equals


已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。)

 
GetEnumerator


返回循环访问 Dictionary的枚举数。

 
GetHashCode


用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从Object 继承。)

 
GetObjectData


实现 System.Runtime.Serialization.ISerializable 接口,并返回序列化 Dictionary实例所需的数据。

 
GetType


获取当前实例的 Type。 (从 Object 继承。)

 
OnDeserialization


实现 System.Runtime.Serialization.ISerializable接口,并在完成反序列化之后引发反序列化事件。

 
ReferenceEquals


确定指定的 Object实例是否是相同的实例。 (从 Object 继承。)

 
Remove


从 Dictionary中移除所指定的键的值。

 
ToString


返回表示当前 Object的 String。 (从 Object 继承。)

 
TryGetValue


获取与指定的键相关联的值。

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <resource key="123">foo</resource>
    <resource key="456">bar</resource>
    <resource key="789">bar</resource>

</data>
i want to put this into a Dictionary (sorted) as key value pairs. i.e: 123:foo, 456:bar...etc

the keys are unknown.

string s = "<data><resource key=/"123/">foo</resource><resource key=/"456/">bar</resource><resource key=/"789/">bar</resource></data>";
            XmlDocument xml = new XmlDocument();
            xml.LoadXml(s);
            XmlNodeList resources = xml.SelectNodes("data/resource");
            SortedDictionary<string,string> dictionary = new SortedDictionary<string,string>();
            foreach (XmlNode node in resources){
                dictionary.Add(node.Attributes["key"].Value, node.InnerText);
            }

linq to xml:

var xml = XDocument.Load(...);
var sequence = from e in xml.Root.Elements()
               let key = (string)e.Attribute("key")
               order by key
               select new {
                 Key = key,
                 Value = (string)e
               };
时间: 2024-08-28 22:11:04

泛型Dictionary的用法详解的相关文章

C#泛型Dictionary的用法实例详解

本文以实例形式讲述了C#中的泛型Dictionary的用法.具有很好的实用价值.分享给大家供大家参考.具体如下: 泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱. 很多非泛型集合类都有对应的泛型集合类,下面是常用的非泛型集合类以及对应的泛型集合类: 非泛型集合类 泛型集合类 ArrayList List<T> HashTable D

js的offsetParent属性用法详解

js的offsetParent属性用法详解:此属性是javascript中较为常用的属性,对于它的良好掌握也是非常有必要的,下面就通过代码实例介绍一下它的用法,希望能够给需要的朋友带来一定的帮助.一.基本介绍:此属性可以返回距离指定元素最近的采用定位(position属性值为fixed.relative或者absolute)父级元素,如果父级元素中没有采用定位的元素,则返回body对象的引用.语法结构: obj.offsetParent 二.代码实例: <!DOCTYPE html> <

python处理word文件:win32com用法详解

目标:用python处理doc文件 方法:引入win32com模块 ************************************************************************** 一.安装 ************************************************************************** 首先要先下载安装win32com模块(起先在linux下装不成功,后在windows下面成功了...) 下载地址:http

jQuery 事件用法详解

jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jquery中文文档 简介 jquery 之所以成为最受欢迎的前端库,很大一部分是得益于它的事件具有良好的语义,优秀的兼容性,并且便于管理和扩展. 在这里我会介绍 jquery 事件的一些比较基础的用法. 实现原理 jquery 事件脱胎于浏览器的 addEventListener (W3) 和 attac

(转)ProgressDialog用法详解

转载自: ProgressDialog用法详解 ProgressDialog的基本用法 ProgressDialog为进度对话框.android手机自带的对话框显得比较单一,我们可以通过ProgressDialog来自己定义对话框中将要显示出什么东西. 首先看看progressDialog里面的方法 setProgressStyle:设置进度条风格,风格为圆形,旋转的.  setTitlt:设置标题  setMessage:设置提示信息:  setIcon:设置标题图标:  setIndeter

BigDecimal用法详解(转)

BigDecimal用法详解    http://www.cnblogs.com/linjiqin/p/3413894.html 一.简介Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal.BigDecimal所创建的是对象

mapminmax的用法详解 _MATLAB

============外一篇 有关mapminmax的用法详解 by faruto==================================转自:http://www.ilovematlab.cn/thread-47224-1-1.html几个要说明的函数接口:[Y,PS] = mapminmax(X)[Y,PS] = mapminmax(X,FP)Y = mapminmax('apply',X,PS)X = mapminmax('reverse',Y,PS) 用实例来讲解,测试数据

Nmap用法详解

nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息.nmap支持很多扫描技术,例如:UDP.TCP connect().TCP SYN(半开扫描).ftp代理(bounce攻击).反向标志.ICMP.FIN.ACK扫描.圣诞树(Xmas Tree).SYN扫描和null扫描.从扫描类型一节可以得到细节.nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫

CSS中伪类及伪元素用法详解

原文:CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的读者可以自己尝试: :active  大致效果为用鼠标点击时,元素增加特效,鼠标松开时,特效消失.多用在按钮的点击上. 写法: 这里id为box的是一div块,在css中首先设置了他的基本样式,下面为加入:active伪类后需要修改的样式. 未点击时: 点击之后: :active.:hover.: