C#中的Dictionary简介

2023-11-08

简介
在C#中,Dictionary提供快速的基于键值的元素查找。当你有很多元素的时候可以使用它。它包含在System.Collections.Generic名空间中。

在使用前,你必须声明它的键类型和值类型。

详细说明
必须包含名空间System.Collection.Generic 
Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值) 
键必须是唯一的,而值不需要唯一的 
键和值都可以是任何类型(比如:string, int, 自定义类型,等等) 
通过一个键读取一个值的时间是接近O(1) 
键值对之间的偏序可以不定义 
创建和初始化一个Dictionary对象
Dictionary myDictionary = new Dictionary(); 
添加键
static void Main(string[] args) 

  Dictionary d = new Dictionary(); 
  d.Add("C#", 2); 
  d.Add("C", 0); 
  d.Add("C++", -1); 

查找键
static void Main(string[] args) 

   Dictionary d = new Dictionary(); 
   d.Add("C#", 2); 
   d.Add("VB", 1); 
   d.Add("C", 0); 
   d.Add("C++", -1); 
   if (d.ContainsKey("VB")) // True 
   { 
      int p = d["VB"]; 
      Console.WriteLine(p); 
     }  
  
     if (d.ContainsKey("C")) 
     { 
       int p1 = d["C"]; 
       Console.WriteLine(p1); 
     } 

删除元素
static void Main(string[] args) 

   Dictionary d = new Dictionary(); 
   d.Add("C#", 2); 
   d.Add("VB", 1); 
   d.Add("C", 0); 
   d.Add("C++", -1); 
  
   d.Remove("C");     
   d.Remove("VB"); 

使用ContainsValue查找值的存在
static void Main(string[] args) 

    Dictionary d = new Dictionary(); 
    d.Add("C#", 2); 
    d.Add("VB", 1); 
    d.Add("C", 0); 
    d.Add("C++", -1); 
    if (d.ContainsValue(1)) 
    { 
        Console.WriteLine("VB"); 
    } 
    if (d.ContainsValue(2)) 
    { 
       Console.WriteLine("C#"); 
    } 
    if (d.ContainsValue(0)) 
    { 
       Console.WriteLine("C"); 
    } 
    if (d.ContainsValue(-1)) 
      { 
          Console.WriteLine("C++"); 
      }                

KeyNotFoundException
如果你尝试读取字典中一个不存在的键,那么你会得到一个KeyNotFoundException。所有在读取一个键之前,你必须先使用ContainKey来核对键是否存在字典中。

基于int键的Dictionary
static void Main(string[] args) 

   Dictionary d = new Dictionary(); 
   d.Add(1000, "Planet"); 
   d.Add(2000, "Stars"); 
   // lookup the int in the dictionary. 
   if (d.ContainsKey(1000)) 
   { 
        Console.WriteLine(true); 
   } 
      Console.ReadLine(); 

排序字典SortedDictionary
在排序字典中,当添加元素时字典必须进行排序,所以插入的速度会比较慢点。但是因为元素是有序存储的,所以元素的查找可以使用二分搜索等一些效率更高的搜索。

总结
在这篇文章中,简要地介绍C#中的Dictionary的使用。动手写写吧~

 

[csharp]  view plain  copy
  1. using System;   
  2. using System.Collections.Generic;   
  3.   
  4. class DictionaryDemo   
  5. {   
  6. static void Main(string[] args)   
  7. {   
  8. DictionaryDemo001();   
  9. Console.ReadLine();   
  10.   
  11. DictionaryDemo002();   
  12. Console.ReadLine();   
  13.   
  14. DictionaryDemo003();   
  15. Console.ReadLine();   
  16. }   
  17.   
  18. /// <summary>   
  19. /// 一般用法   
  20. /// </summary>   
  21. static void DictionaryDemo001()   
  22. {   
  23. Dictionary<intstring> dict = new Dictionary<intstring>();   
  24. dict.Add(1, "111");   
  25. dict.Add(2, "222");   
  26.   
  27. //判断是否存在相应的key并显示   
  28. if (dict.ContainsKey(2))   
  29. {   
  30. Console.WriteLine(dict[2]);   
  31. }   
  32.   
  33. //遍历Keys   
  34. foreach (var item in dict.Keys)   
  35. {   
  36. Console.WriteLine("Key:{0}", item);   
  37. }   
  38.   
  39. //遍历Values   
  40. foreach (var item in dict.Values)   
  41. {   
  42. Console.WriteLine("value:{0}", item);   
  43. }   
  44.   
  45. //遍历整个字典   
  46. foreach (var item in dict)   
  47. {   
  48. Console.WriteLine("key:{0} value:{1}", item.Key, item.Value);   
  49. }   
  50. }   
  51.   
  52. /// <summary>   
  53. /// 参数为其它类型   
  54. /// </summary>   
  55. static void DictionaryDemo002()   
  56. {   
  57. Dictionary<stringstring[]> dict = new Dictionary<stringstring[]>();   
  58. dict.Add("1""1,11,111".Split(','));   
  59. dict.Add("2""2,22,222".Split(','));   
  60. Console.WriteLine(dict["2"][2]);   
  61. }   
  62.   
  63. /// <summary>   
  64. /// 调用自定义类   
  65. /// </summary>   
  66. static void DictionaryDemo003()   
  67. {   
  68. Dictionary<int, yongfa365> dict = new Dictionary<int, yongfa365>();   
  69. for (int i = 0; i < 10; i++)   
  70. {   
  71. yongfa365 y = new yongfa365();   
  72. y.UserCode = i;   
  73. y.UserName = "www.yongfa365.com " + i.ToString();   
  74. dict.Add(i, y);   
  75. }   
  76. foreach (var item in dict)   
  77. {   
  78. Console.WriteLine("{0} One:{1} UserName:{2}", item.Key, item.Value.UserCode, item.Value.UserName);   
  79. }   
  80. }   
  81. }   
  82.   
  83. class yongfa365   
  84. {   
  85. public int UserCode { getset; }   
  86. public string UserName { getset; }   
  87.   
  88. }   


[csharp]  view plain  copy
  1. using System;   
  2. using System.Collections.Generic;   
  3.   
  4. class DictionaryDemo   
  5. {   
  6. static void Main(string[] args)   
  7. {   
  8. DictionaryDemo001();   
  9. Console.ReadLine();   
  10.   
  11. DictionaryDemo002();   
  12. Console.ReadLine();   
  13.   
  14. DictionaryDemo003();   
  15. Console.ReadLine();   
  16. }   
  17.   
  18. /// <summary>   
  19. /// 一般用法   
  20. /// </summary>   
  21. static void DictionaryDemo001()   
  22. {   
  23. Dictionary<intstring> dict = new Dictionary<intstring>();   
  24. dict.Add(1, "111");   
  25. dict.Add(2, "222");   
  26.   
  27. //判断是否存在相应的key并显示   
  28. if (dict.ContainsKey(2))   
  29. {   
  30. Console.WriteLine(dict[2]);   
  31. }   
  32.   
  33. //遍历Keys   
  34. foreach (var item in dict.Keys)   
  35. {   
  36. Console.WriteLine("Key:{0}", item);   
  37. }   
  38.   
  39. //遍历Values   
  40. foreach (var item in dict.Values)   
  41. {   
  42. Console.WriteLine("value:{0}", item);   
  43. }   
  44.   
  45. //遍历整个字典   
  46. foreach (var item in dict)   
  47. {   
  48. Console.WriteLine("key:{0} value:{1}", item.Key, item.Value);   
  49. }   
  50. }   
  51.   
  52. /// <summary>   
  53. /// 参数为其它类型   
  54. /// </summary>   
  55. static void DictionaryDemo002()   
  56. {   
  57. Dictionary<stringstring[]> dict = new Dictionary<stringstring[]>();   
  58. dict.Add("1""1,11,111".Split(','));   
  59. dict.Add("2""2,22,222".Split(','));   
  60. Console.WriteLine(dict["2"][2]);   
  61. }   
  62.   
  63. /// <summary>   
  64. /// 调用自定义类   
  65. /// </summary>   
  66. static void DictionaryDemo003()   
  67. {   
  68. Dictionary<int, yongfa365> dict = new Dictionary<int, yongfa365>();   
  69. for (int i = 0; i < 10; i++)   
  70. {   
  71. yongfa365 y = new yongfa365();   
  72. y.UserCode = i;   
  73. y.UserName = "www.yongfa365.com " + i.ToString();   
  74. dict.Add(i, y);   
  75. }   
  76. foreach (var item in dict)   
  77. {   
  78. Console.WriteLine("{0} One:{1} UserName:{2}", item.Key, item.Value.UserCode, item.Value.UserName);   
  79. }   
  80. }   
  81. }   
  82.   
  83. class yongfa365   
  84. {   
  85. public int UserCode { getset; }   
  86. public string UserName { getset; }   
  87.   
  88. }   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#中的Dictionary简介 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 【python数据挖掘课程】二十六.基于SnowNLP的豆瓣评论情感分析

    这是 Python数据挖掘课程 系列文章 前面很多文章都讲解了分类 聚类算法 而这篇文章主要讲解如何调用SnowNLP库实现情感分析 处理的对象是豆瓣 肖申克救赎 的评论文本 文章比较基础 希望对你有所帮助 提供些思路 也是自己教学的内容
  • 全国青少年电子信息智能创新大赛(决赛)python·模拟三卷,含答案解析

    全国青少年电子信息智能创新大赛 决赛 python 模拟三卷 一 程序题 第一题 描述 现有 n 个人依次围成一圈玩游戏 从第 1 个人开始报数 数到第 m 个人出局 然 后从出局的下一个人开始报数 数到第 m 个人又出局 如此反复到只剩下
  • Google分布式三篇论文---BigTable

    Google s BigTable 原理 翻译 题记 google 的成功除了一个个出色的创意外 还因为有 Jeff Dean 这样的软件架构天才 官方的 Google Reader blog 中有对BigTable 的解释 这是Googl
  • TensorRT(2):TensorRT的使用流程

    TensorRT系列传送门 不定期更新 深度框架 TensorRT 文章目录 一 在线加载caffe模型 序列化保存到本地 二 反序列化直接加载保存后的trt模型 以caffe分类模型为例 简单介绍TRT的使用流程 这里不涉及量化 就以fp
  • 测试的艺术:代码检查、走查与评审

    软件开发人员通常不会考虑的一种测试形式 人工测试 大多数人都以为 因为程序是为了供机器执行而编写的 那么也该由机器来对程序进行测试 这种想法是有问题的 人工测试方法在暴露错误方面是很有成效的 实际上 大多数的软件项目都应使用到一下的人工测试
  • 详解Shell 脚本中 “$” 符号的多种用法

    通常情况下 在工作中用的最多的有如下几项 1 表示执行脚本传入参数的个数 2 表示执行脚本传入参数的列表 不包括 0 3 表示进程的id Shell本身的PID ProcessID 即脚本运行的当前 进程ID号 4 Shell最后运行的后台
  • 解决uni-toast被弹窗组件遮挡

    在App vue uni toast设置层级比popup高就行 uni toast z index 999999
  • 输入文本就可建模渲染了?!OpenAI祭出120亿参数魔法模型!

    转自 https new qq com omn 20210111 20210111A0CBRD00 html 2021刚刚开启 OpenAI又来放大招了 能写小说 哲学语录的GPT 3已经不足为奇 那就来一个多模态 图像版GPT 3 今天
  • 微信小程序事件和页面跳转

    一 页面跳转 1 非TabBar页面 一个小程序拥有多个页面 我们通过wx navigateTo进入一个新的页面 我们通过下边点击事件实现页面跳转进行代码实现及参考 wx navigateBack 回退到上一个页面 wx redirectT
  • 【单片机毕业设计】【mcuclub-310】红外遥控器

    设计简介 项目名 基于单片机的红外遥控器的设计 标准版 单片机 STC89C52 功能简介 1 利用红外发射电路 通过按不同的按键发送不同的数据值 2 利用红外接收电路 接收发送端发送的数据 3 通过数码管显示数据 资料预览 效果图 发送端
  • MiniGPT-4本地部署的实战方案

    大家好 我是herosunly 985院校硕士毕业 现担任算法研究员一职 热衷于机器学习算法研究与应用 曾获得阿里云天池比赛第一名 CCF比赛第二名 科大讯飞比赛第三名 拥有多项发明专利 对机器学习和深度学习拥有自己独到的见解 曾经辅导过若
  • Ubuntu22下OpenCV4.6.0+contrib模块编译安装

    目录 第一章 Ubuntu22下OpenCV4 6 0 contrib模块编译安装 第二章 ubuntu22下C kdevelop环境搭建 OpenCV示例 第三章 C 下OPENCV驱动调用海康GigE工业相机 文章目录 目录 Ubunt
  • K8S常用资源认识

    文章目录 一 Namespace 二 Pod 三 Label 四 Deployment 五 Service 一 Namespace namespace是kubernetes系统中的一种非常重要的资源 它的主要作用是用来实现多套环境的资源隔离
  • 基于栈与基于寄存器的指令集架构

    用C的语法来写这么一个语句 C代码 a b c 如果把它变成这种形式 add a b c 那看起来就更像机器指令了 对吧 这种就是所谓 三地址指令 3 address instruction 一般形式为 op dest src1 src2
  • python 模块和包

    文章目录 前言 模块 什么是模块 导入模块 import 导入模块 from 模块名 import 功能 from 模块名 import as定义别名 制作模块 模块的定位顺序 all 包 导入包 import 包名 模块 导入包 from
  • 打开Ubuntu18.04出现启动紫屏卡死不弹登录框问题

    1 进入grub高级模式 重启虚拟机 按esc进入 按 进入Ubuntu高级选项 2 选择recovery mode 3 选择root shell会话 输入root密码 4 编辑 etc gdm3 custom conf文件 将 Wayla
  • 5-快速排序

    假设有下面这样一排数据需要排序 3 7 6 1 2 9 1 2 6 排开常用的冒泡和选择排序 今天我们来试一下一种新的方法 快速排序 快速排序的思路如下 首先我们要先从这组数据中选出一个任意值X 然后以X为分界 比X小的数据排到X的左半边
  • Shiro之@RequiresPermissions注解原理详解

    前言 shiro为我们提供了几个权限注解 如下图 这几个注解原理都类似 这里我们讲解 RequiresPermissions的原理 铺垫 第一 首先要清楚 RequiresPermissions的基本用法 就是在Controller的方法里
  • python爬虫超时重试_python爬虫多次请求超时的几种重试方法(6种)

    第一种方法 headers Dict url https www baidu com try proxies None response requests get url headers headers verify False proxi
  • C#中的Dictionary简介

    简介 在C 中 Dictionary提供快速的基于键值的元素查找 当你有很多元素的时候可以使用它 它包含在System Collections Generic名空间中 在使用前 你必须声明它的键类型和值类型 详细说明 必须包含名空间Syst