简介
字典是C#开发中经常使用的一种键值对容器,类似C++的map,可使用foreach或迭代器遍历
不能装多个相同key,底层实现是哈希函数
具体用法
1.创建
Dictionary<key, value>
// Key和 Value可以是任意类型
Dictionary<int, string> _testDic = new Dictionary<int, string>();
2.添加元素 Add
.Add(key, value) , 相同相同Key值只能Add一次
// 2.添加元素
_testDic.Add(24, "Canon");
// 注意相同相同Key值只能Add一次
_testDic.Add(24, "Jason");// 报错:System.ArgumentException:“已添加了具有相同键的项。”
// 可以使用ContainsKey判断字典中是否已经存在
if (!_testDic.ContainsKey(24)) _testDic.Add(24, "Canon");
3.删除元素 Remove
Remove(key) 删除不存在的值不会报错
// 3.删除元素
// Remove 删除不存在的值不会报错
_testDic.Remove(24);
4.查询取值
类似C++中的map,可直接用方括号map[key]取值
// 4.取值
// 索引器取值,若字典中没有Key会报错
string str = _testDic[24];
// TryGetValue 使用一个输出参数,取值成功返回true,内部对str赋值,否则返回false
bool isExist = _testDic.TryGetValue(24, out str);
5.改值
也可通过方括号访问改值 map[key] = XXX;
// 5.改值
// 要确保字典中确实存在该值
if (_testDic.ContainsKey(1)) _testDic[1] = "";
6.遍历
可使用foreach遍历,也可使用迭代器遍历
// 6.遍历
// Key
foreach (var key in _testDic.Keys) Console.WriteLine("Key = {0}", key);
// Value
foreach (var value in _testDic.Values) Console.WriteLine("value = {0}", value);
// foreach遍历
foreach (var kvp in _testDic) Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
// 迭代器遍历
var enumerator = _testDic.GetEnumerator();
while (enumerator.MoveNext())
{
var kvp = enumerator.Current;
Console.WriteLine("Key = {0}", kvp.Key);
Console.WriteLine("Key = {0}", kvp.Value);
}
字典底层实现:哈希函数
哈希函数
字典的Key——Value映射是利用哈希函数来建立的。 什么是哈希函数呢? 把一个对象转换成唯一且确定值的函数就叫做哈希函数,也叫做散列函数。 这个值就叫做哈希码(hashCode),在C#里一般是一个32位正整数。 就好比每一个人都对应一个身份证号码。