2011-03-31 19:48:30|?次阅读|上传:wustguangh【已有?条评论】发表评论
在VC中使用过CMap以及在Java中使用过Map的朋友应该很熟悉,使用Map可以方便实现基于键值对数据的处理,在C#中,你就需要实现IDictionary接口的关键字值集合类,允许通过关键字(如字符串名)进行索引,这也可以使用索引符来完成,但这种索引符参数是与存储的项相关联的关键字,而不是int索引。通常情况下,我们使用泛型类Dictionary来实现这样的功能。
Dictionary泛型类提供快速的基于键值的元素查找,Dictionary<K, V>是一个泛型 ,他本身有集合的功能有时候可以把它看成数组,它的结构是这样的:Dictionary<[key], [value]> ,他的特点是存入对象是需要与[key]值一一对应的存入该泛型 ,通过某一个一定的[key]去找到对应的值。Dictionary<K, V>泛型类在定义变量是需要指定当前存储的键值对类型,如:
Dictionary<string, string> hashMap = new Dictionary<string, string>();
补充说明:
1、必须包含名空间System.Collection.Generic
2、Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)
3、键必须是唯一的,而值不需要唯一的
4、键和值都可以是任何类型(比如:string, int, 自定义类型,等等)
5、通过一个键读取一个值的时间是接近O(1)
6、键值对之间的偏序可以不定义
首先给出一个使用泛型类Dictionary<K, V>的完整例子,其中包含了创建和初始化一个Dictionary对象、判断是否存在相应的key并显示、遍历所有的Keys、遍历所有的Values、遍历整个字典。
C#代码:
/// <summary> /// Dictionary的基本用法 /// </summary> static void DictionaryDemo() { Dictionary<int, string> dict = new Dictionary<int, string>(); dict.Add(1, "111"); dict.Add(2, "222"); //判断是否存在相应的key并显示 if (dict.ContainsKey(2)) { Console.WriteLine(dict[2]); } //遍历Keys foreach (var item in dict.Keys) { Console.WriteLine("Key:{0}", item); } //遍历Values foreach (var item in dict.Values) { Console.WriteLine("value:{0}", item); } //遍历整个字典 foreach (var item in dict) { Console.WriteLine("key:{0} value:{1}", item.Key, item.Value); } }
下面对一些比较重要的用法进行补充介绍:
1.在字典Dictionary<K, V>中查找指定键的元素
static void Test(string[] args) { Dictionary<string, int> d = new Dictionary<string, int>(); d.Add("C#", 2); d.Add("VB", 1); d.Add("C", 0); d.Add("C++", -1); //判断字典中是否包含键为“VB”的元素 if (d.ContainsKey("VB")) // True { int p = d["VB"]; Console.WriteLine(p); } //判断字典中是否包含键为“C”的元素 if (d.ContainsKey("C")) { int p1 = d["C"]; Console.WriteLine(p1); } }
2.在字典Dictionary<K, V>中删除指定键的元素
static void Test(string[] args) { Dictionary<string, int> d = new Dictionary<string, int>(); d.Add("C#", 2); d.Add("VB", 1); d.Add("C", 0); d.Add("C++", -1); //删除键为“C”的元素 d.Remove("C"); //删除键为“VB”的元素 d.Remove("VB"); }