写点什么

C#之 Dictionary 详解

作者:追逐时光者
  • 2025-10-18
    广东
  • 本文字数:1738 字

    阅读完需:约 6 分钟

基本概念

Dictionary<TKey, TValue>是 C#中用于存储键值对集合的泛型类,属于System.Collections.Generic命名空间。它允许使用键(Key)来访问与其关联的值(Value)。其中,TKey 表示字典中键的类型,TValue 表示字典中值的类型。

Dictionary 的基本结构

  • 键(Key):唯一标识集合中的一个元素。键是唯一的,不能有重复。

  • 值(Value):与键相关联的数据。值可以是任意类型,并且可以有重复。

  • 键值对(KeyValuePair):键和值的组合,表示 Dictionary 中的一个元素。

Dictionary 的主要特性

  • 快速访问:通过键可以快速检索到对应的值,平均时间复杂度接近 O(1),因为Dictionary<TKey,TValue>类是作为哈希表实现。

  • 唯一键(Key):每个键在 Dictionary 中都是唯一的,不能重复。

  • 动态大小:Dictionary 的大小可以动态调整,当元素数量超过容量时,它会自动扩容。

  • 无序集合:Dictionary 中的元素是无序的,不能通过索引来访问它们。

Dictionary 的常用操作

以下是 C#中 Dictionary 的常用操作完整代码,其中包括添加元素、访问元素、修改元素、删除元素、检查键或值是否存在,以及遍历元素:

public static void DictionaryOperation(){    //创建一个Dictionary来存储学生学号ID和姓名    Dictionary<int, string> studentDic = new Dictionary<int, string>();
    #region 添加元素
    // Add方法(键必须唯一)    studentDic.Add(1, "大姚");    studentDic.Add(2, "小袁");    studentDic.Add(3, "Edwin");
    // 索引器语法(键不存在时添加,存在时更新)    studentDic[4] = "Charlie";    studentDic[5] = "追逐时光者";
    // 安全添加(避免异常)    bool isAdded = studentDic.TryAdd(6, "小明"); // 返回 false,因键已存在
    #endregion
    #region 访问元素
    // 直接访问(键必须存在,否则会有异常)    var currentUserName = studentDic[1];    Console.WriteLine($"当前学生姓名: {currentUserName}");
    // 安全访问(避免异常)    if (studentDic.TryGetValue(5, out var getUserName))    {        Console.WriteLine($"UserName:{getUserName}");    }    else    {        Console.WriteLine("当前学生ID不存在");    }
    #endregion
    #region
    // 修改元素    studentDic[2] = "大西瓜";
    Console.WriteLine($"修改后的名称:{studentDic[2]}");
    #endregion
    #region 删除元素
    // 删除元素    bool isRemoved = studentDic.Remove(3);
    Console.WriteLine($"删除结果:{isRemoved}");
    #endregion
    #region 检查键或值是否存在
    // 检查键是否存在    if (studentDic.ContainsKey(1))    {        Console.WriteLine("存在");    }    else    {        Console.WriteLine("不存在");    }
    bool isExistcontainsValue = studentDic.ContainsValue("追逐时光者");
    Console.WriteLine($"是否存在:{isExistcontainsValue}");

    #endregion
    #region 遍历元素
    // 遍历元素    foreach (KeyValuePair<int, string> student in studentDic)    {        Console.WriteLine($"ID: {student.Key}, Name: {student.Value}");    }
    // 使用键的枚举器    foreach (var key in studentDic.Keys)    {        Console.WriteLine($"Key: {key}, Value: {studentDic[key]}");    }
    // 使用值的枚举器    foreach (var value in studentDic.Values)    {        // 注意:这种方式不能直接获取键,只能获取值        Console.WriteLine($"Value: {value}");    }
    #endregion}

复制代码

参考文章

  • https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.generic.dictionary-2?view=net-9.0

发布于: 刚刚阅读数: 2
用户头像

不积跬步无以至千里,不积小流无以成江海! 2020-01-14 加入

微软MVP、华为云HCDE、华为云云享专家、51CTO专家博主、阿里云专家博主、博客园推荐博客、CSDN博客专家、腾讯云创作之星、掘金优秀创作者,一个热爱开源的全栈软件工程师,擅长C#、.NET、Vue等相关技术开发。

评论

发布
暂无评论
C#之 Dictionary 详解_C#_追逐时光者_InfoQ写作社区