C#中的Dictionary是一种特殊的数据集合。因为它由键值,和数值组成,并且一一对应,通过键值我们就可以查询到对应的数值,就好像查字典一样,故而我们会形象地称呼它为“字典”。据于它们这种特殊地结构,C#定义了它很多地属性与方法,在实际应用中非常实用。
一、结构
Dictionary的结构是这样的:Dictionary<[key],[value]>,所引用的命名空间是:System.Collections.Generic。
二、定义
关于Dictionary的定义,它必须遵循一下规则:
1、键值(key)与(value),一一映射,共同关联组成一个键值对
2、任何的键都是唯一的
3、键不能为空(若值为引用类型,则可以为空)
4、key和value可以是任意类型
三、创建与初始化
Dictionary<[key],[value]> mDic = new Dictionary<[key],[value]>();
例:Dictionary<int,int> mDic = new Dictionary<int,int>();
四、使用技巧
1、添加元素:Add
例:
mDic.Add(1,1);
mDic.Add(2,1);
mDic.Add(3,2);
2、删除元素:Remove
例:
mDic.Remove(1); //移除指定键的键值
3、查询字典中是否包含指定的键:ContainsKey
例:
if(mDic.ContainsKey(1)) //先判断是否存在这样的键
{
Console.WriteLine(“字典中含有这个键”);
}
4、通过key获取对应的值:Dictionary[key]
例:
if(mDic.ContainsKey(1)) //先判断是否存在这样的键
{
Console.WriteLine(mDic[1]);
}
5、遍历键值对:KeyValuePair
例:
foreach(KeyValuePair<int,int> temp in mDic)
{
Console.WriteLine("Key = {0}, Value = {1}",temp.Key, temp.Value);
}
6、遍历所有键与所有键值:Keys(Dictionary<T,T>.KeyCollection),Values(Dictionary<T,T>.ValueCollection)
foreach(var key in mDic.Keys)
{
Console.WriteLine(key); //获取所有键
}
foreach(var value in mDic.Values)
{
Console.WriteLine(value); //获取所有键值
}
7、获取与指定的键相关联的值: public bool TryGetValue(TKey key, out TValue value);
例:
int val = null;
mDic.TyrGetValue(1,out val);
Console.WriteLine(val);
8、对Dictionary进行排序的一个方法
例:
mDic.Add(1,1);
mDic.Add(3,3);
mDic.Add(5,5);
mDic.Add(6,6);
mDic.Add(4,4);
mDic.Add(2,2);
var result = from pair in mDic orderby pair.Key select pair;
foreach (KeyValuePair<int, int> pair in result)
{
Console.WriteLine("Key:{0}, Value:{1}", pair.Key, pair.Value);
}
//Key:1, Value:1
//Key:2, Value:2
//Key:3, Value:3
//Key:4, Value:4
//Key:5, Value:5
//Key:6, Value:6
9、对Dictionary求交集、差集、并集
例:
Dictionary<int, int> Dic1 = new Dictionary<int, int>();
for (int i = 0; i < 10; i++)
{
Dic1.Add(i, i);
}
Dictionary<int, int> Dic2 = new Dictionary<int, int>();
for (int i = 5; i < 15; i++)
{
Dic2.Add(i, i);
}
//求交集
var jj = Dic1.Keys.Intersect(Dic2.Keys);
foreach (var i in jj)
{
Console.Write(i + " ");
}
//求差集
var cj = Dic1.Keys.Except(Dic2.Keys);
foreach (var i in cj)
{
Console.Write(i + " ");
}
//求并集
var bj = Dic1.Keys.Union(Dic2.Keys);
foreach (var i in bj)
{
Console.Write(i + " ");
}
五、其它常用属性与方法的说明
Comparer: 获取用于确定字典中的键是否相等的 IEqualityComparer。
Count: 获取包含在 Dictionary中的键/值对的数目。
Item: 获取或设置与指定的键相关联的值。
Keys: 获取包含 Dictionary中的键的集合。
Values: 获取包含 Dictionary中的值的集合。
Add: 将指定的键和值添加到字典中。
Clear: 从 Dictionary中移除所有的键和值。
ContainsKey: 确定 Dictionary是否包含指定的键。
ContainsValue: 确定 Dictionary是否包含特定值。
GetEnumerator: 返回循环访问 Dictionary的枚举数。
GetType: 获取当前实例的 Type。 (从 Object 继承。)
Remove: 从 Dictionary中移除所指定的键的值。
ToString: 返回表示当前 Object的 String。 (从 Object 继承。)
TryGetValue: 获取与指定的键相关联的值。