C# Dictionary(数据字典)的基本用法
C# Dictionary(数据字典)的基本用法 - Mr.Cat~ - 博客园 (cnblogs.com)
通常情况下,我们可以通过 int 类型的索引来从数组或者 List 集合中查询所需的数据
但是如果情况稍微复杂一点:索引是非 int 类型的数据(比如 string 或其他类型),这时候就需要使用字典
顾名思义,数据字典就是一种让我们可以通过索引查询到特定数据的数据结构类型,它的关键字就是:Dictionary
Dictionary 用法
1、value 为字符串类型的值:Dictionary<string,string> MyDt = new Dictionary<string,string>();
2、value 为对象类型的值:Dictionary<string,List<object>> myDt = new Dictionary<string,List<object>>();

Dictionary 注意事项
- C# 的 Dictionary<Tkey,TValue> 通过类在内部维护两个数组来实现功能:一个 keys 数组容纳要从其映射的键,另一个 values 容纳映射到的值
在 Dictionary<Tkey,TValue> 集合中插入键 / 值对时,将自动记录哪个键和哪个值关联,从而允许开发人员快速和简单地获取具有指定键的值
- C# Dictionary<Tkey,TValue> 集合不能包含重复的键:调用 Add 方法添加键数组中已有的键将抛出异常
可用 ContainKey 方法测试 Dictionary<Tkey,TValue> 集合是否已包含特定的键
- Dictionary<Tkey,TValue> 集合内部采用一种稀疏数据结构,在有大量内存可用时才最高效
随着更多元素的插入,Dictionary<Tkey,TValue> 集合可能快速消耗大量的内存
- 用 foreach 遍历 Dictionary<Tkey,TValue> 集合返回一个 KeyValuePair<Tkey,TValue>
该结构包含数据项的键和值拷贝,可通过 Key 和 Value 属性访问每个元素
获得的元素是只读的,不能用它们修改 Dictionary<Tkey,TValue> 集合中的数据
Dictionary 遍历
遍历方法:
- 遍历 Key
- 遍历 Value
- 遍历 Key-Value
- 遍历 string 型 value

static void Main(string[] args)
{
//创建一个字典
Dictionary<int, string> MyDh = new Dictionary<int, string>();
MyDh.Add(1, "aaa");
MyDh.Add(2, "bbb");
MyDh.Add(3, "ccc");
MyDh.Add(4, "ddd");
//遍历 Key
Console.WriteLine("遍历 Key 结果:");
foreach (int Key in MyDh.Keys)
{
Console.WriteLine(Key);
}
//遍历 Value
Console.WriteLine("遍历 Value 结果:");
foreach (string value in MyDh.Values)
{
Console.WriteLine(value);
}
//遍历 Key-Value
Console.WriteLine("遍历 Key-Value 结果:");
foreach (KeyValuePair<int, string> item in MyDh)
{
Console.WriteLine(item.Key + "\t" + item.Value);
}
}

遍历得到的结果如下:

Dictionary 取值
常用的取值方法有 2 种:
方法 1:先判断是否存在,如果存在再进行取值
if(aDictionary.ContainsKey(key))
{
var value = Dictionary[key];
}
方法 2:使用 TryGetValue
int value;
aDictionary.TryGetValue(key, out value);
在项目中,如果只是取值,推荐使用 TryGetValue 来获取
原因:
方法 1 中 ContainsKey 执行了一次方法,Dictionary[Key] 再次执行了一次方法,整个取值过程调用了两次方法
而方法 2 的 TryGetValue 只调用了一次方法,当然并不是调用的方法越多就越耗性能
判断在字典中是否存在一般会通过 Key 来获取 HashCode,然后通过 Equal 对值进行比对
字典存储中会给 Key 一个对应的 HashCode,如果数据过多,那么 HashCode 也可能重复,所以需要再次进行比较,时间主要花费在这上面
总结:
如果只是取值,直接用 TryGetValue 花费更小、更快、更安全,找不到 Value 时将返回 False
C# Dictionary(数据字典)的基本用法的更多相关文章
- Data Dictionary 数据字典
数据字典是一种通用的程序设计方法.可以认为,不论什么程序,都是为了处理一定的主体,这里的主体可能是人员.商品(超子).网页.接口.数据库表.甚至需求分析等等.当主体有很多的属性,每种属性有很多的取值, ...
- (转)C#中键值对类型Hashtable与Dictionary比较和相关用法
最近在使用C#中的Hashtable与Dictionary的时候,想知道其区别,通过查找网络相关博客资料,作出下列总结. Hashtable与Dictionary虽然都是作为键值对的载体,但是采用的是 ...
- Dictionary<Key,Value>的用法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C#中Dictionary的作用及用法讲解
Dictionary<string, string>是一个泛型 他本身有集合的功能有时候可以把它看成数组 他的结构是这样的:Dictionary<[key], [value]> ...
- 关于python词典(Dictionary)的get()用法
先贴出参考链接:http://www.runoob.com/python/att-dictionary-get.html get()方法语法: dict.get(key, default=None) ...
- oracle 数据字典
select * from dictionary; --数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的. 比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访 ...
- 无废话版本-Asp.net MVC4.0 Rasor的基本用法
最近工作有点忙,好久没写东西了!废话不多说了,进入主题! 1.在页面中输出单一变量时候,只要在C#语句之前加上@符号即可,For example: <p>Now Time:@DateTim ...
- Oracle数据字典详解
学习笔记:oracle数据字典详解 --- 本文为TTT学习笔记,首先介绍数据字典及查看方法,然后分类总结各类数据字典的表和视图.然后列出一些附例. 数据字典系统表,保存在system表空间中. ...
- 6种innodb数据字典恢复方法
6种innodb数据字典恢复方法 https://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html frm文件重 ...
- C# 存储相同键多个值的Dictionary
涉及到两个问题: 一.访问磁盘中文件夹.文件夹下面的文件夹 先看一下磁盘文件夹结构 C盘下面有个根文件夹SaveFile,SaveFIle下面有两个子文件夹分别为,2018.2019, 子文件下201 ...
随机推荐
- 在矩池云安装使用PaddleHub 和 PaddlePaddle
之前在安装 PaddleHub 导入的时候遇到各种错误,不是这个包没这个模块,就是哪个包没这个属性 ...很头痛,网上也没有 PaddleHub 和 PaddlePaddle 对应的版本,只能自己慢慢 ...
- 【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
问题描述 如何查看App Service Java堆栈JVM相关的参数默认配置值? 问题解答 可以通过App Service的高级管理工具(kudu:)来查看JVM的相关参数,使用命令:java -X ...
- 【Azure 应用服务】App Service多个部署槽(Slot)之间,设置Traffic百分比后,如何来判断请求是由那一个槽(Slot)来进行处理呢?
问题描述 当我们部署应用到App Service后,为了实现对生成的最小影响,通常是把新版本部署在一个预生产的槽中,然后进行验证.另一方面,为了进行A/B验证,需要把生成槽的流量,切入一部分到预生产槽 ...
- 浅析图数据库 Nebula Graph 数据导入工具——Spark Writer
从 Hadoop 说起 近年来随着大数据的兴起,分布式计算引擎层出不穷.Hadoop 是 Apache 开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用.Hadoop 的设计核心思想 ...
- 代码随想录算法训练营第二十七天| 39. 组合总和 40.组合总和II 131.分割回文串
39. 组合总和 卡哥建议:本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制 题目链接/文章讲解:https://programmercarl.com ...
- supervisor的使用与配置说明
Supervisor 是用 Python 开发的一套通用的 进程管理程序 ,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 一. 安装 1.1 安装 # 根目录下 ...
- Codeforces Round 734 (Div. 3)B2. Wonderful Coloring - 2(贪心构造实现)
思路: 分类讨论: 当一个数字出现的次数大于等于k,那么最多有k个能被染色, 当一个数字出现的次数小于k,南那么这些数字都可能被染色 还有一个条件就是需要满足每个颜色的数字个数一样多,这里记出现次数小 ...
- VMware workstation虚拟机联网的方法
注意:我的虚拟机所安装的系统是Centos 方法一: 第一步:先设置VMware的编辑--虚拟网络编辑器,启用VMnet8,NAT模式,如下图所示. 其实就是VMware默认的设置,无须更改,如果不小 ...
- C++标准库字符串流sstream
sstream与strstream 在C++有两种字符串流,一种在<strstream>中定义,另一种在<sstream>中定义,两者的区别如下: strstream里包含st ...
- 【数据结构】C语言实现动态扩容数组
// resizable array /* Think about a set of functions that provide a mechanism of resizable array of ...