• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
jk-2048
博客园    首页    新随笔    联系   管理    订阅  订阅
C#数据结构 字典Dictionary

简介

字典是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位正整数。 就好比每一个人都对应一个身份证号码。
posted on 2024-02-23 23:32  JK降谷羽  阅读(296)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3