C#中的数据字典Dictionary
前言
今天上午和往常一样在网上冲浪,看到码甲哥微信群里面在聊一个面试题,比较有意思,这里简单分享下结论中的Dictionary字典。
有50w个int类型的数字,现在需要判断一下里面是否存在重复的数字,请简要说明下。
假如这个题目让我做,第一感觉可能直接向两个for循环,简单做个判断就解决了。可是看到几个大佬的讨论,才发现是我知识浅薄了。
这道题难道考的就是对业务代码循环的应用吗?肯定不是的。
我们知道,在验证一段代码或者一个程序算法的完美指标是空间复杂度和时间复杂度。通过这两个指标来进行评判。
空间复杂度:
是指在一个算法程序在执行过程中,单位时间内临时所占用的存储容量是多少。用S(n)=O(f(n))来表示。
时间复杂度:
是指在一个算法程序执行过程中,所需要花费的时间多少。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n)),称为O(f(n))为算法的时间复杂度。
比如插入排序的时间复杂度是O(n^2),空间复杂度是O(1)。
一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。
群里面讨论的过程中,出现有数组array,键值对,还有数据字典Dictionary(键值对的一种)。最后都觉得使用Dictionary存储这50w个int类型的数据,利用其key或者value来判断是否有重复的值。
既然看到这里了,今天咱也就简单复习下Dictionary,看看它到底有什么魅力。
Dictionary<TKey,TValue>字典
根据MSDN上的记载,说它是表示键和值的集合。提供一组键到一组值的映射。每次对字典的添加都包含一个值和与其关联的键。使用其键检索值的速度非常快,接近O(1)。
Dictionary<TKey,TValue>该类是作为哈希表实现的,检索的速度取决于为指定的类型的哈希算法的质量TKey。
其余特性简单总结如下
- 必须包含命名空间System.Collection.Generic
- Dictionary里面的每一个元素都是一个键值对
- 键必须是唯一的,而值不需要唯一
- 键和值都可以是任何类型
- 通过一个键读取一个值的时间复杂度接近O(1),查找速度非常快,要比list等快很多
- 键值对之间的偏序可以不定义
- 可以实现通过键值查找、插入、删除一个键值对的操作,这些如果用数组实现非常麻烦

下面是关于Dictionary的一些CRUD操作。
定义字典、添加键值、取值、改值、遍历key、遍历value、删除元素、清空所有元素
//定义
static Dictionary<int, string> ahuiInfo = new Dictionary<int, string>();
static void Main(string[] args)
{
//添加键值
ahuiInfo.Add(1,"阿辉");
ahuiInfo.Add(2, "阿酶");
ahuiInfo[2] = "阿一"
//取值
var name=ahuiInfo[0].ToString();
Console.WriteLine(""+name
//修改值
ahuiInfo[0] = "阿姨";
Console.WriteLine("" + ahuiInfo[0].ToString()
//遍历key和value
foreach (var key in ahuiInfo.Keys)
{
Console.WriteLine(""+key.ToString());
foreach (var value in ahuiInfo.Values)
{
Console.WriteLine(" "+value.ToString());
//遍历字典
foreach(KeyValuePair<int ,string> kvp in ahuiInfo)
{
Console.WriteLine("key="+kvp.Key+",value="+kvp.Value);
//删除元素
ahuiInfo.Remove(0
//判断键是否存在
if (ahuiInfo.ContainsKey(0))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
}
}
寄语
人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。
原创不易,给个关注。
我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。
C#中的数据字典Dictionary的更多相关文章
- 在Web Service中傳送Dictionary
有個需求,想在Web Service中傳遞Dictionary<string, string>參數,例如: 排版顯示純文字 [WebMethod] public Dictionary< ...
- 问题:不支持Dictionary;结果:在Web Service中傳送Dictionary
在Web Service中傳送Dictionary 有個需求,想在Web Service中傳遞Dictionary<string, string>參數,例如: 排版顯示純文字 [WebMe ...
- Oracle中的数据字典技术及常用数据字典总结
一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等.当用户在对数据库中的数据进行 ...
- 数据字典Dictionary存放键值对
1. 方法思路: 使用数据字典[Dictionary<string, string>],声明一个list集合,将“XML子节点名称”.“节点值”以键[节点名称]值[节点值]对的形式 ...
- 【转】fastdb中的数据字典
在程序的启动过程中,第一项任务,在没执行main 函数之前,通过REGISTER宏定义,把表的结构存储在一个全局变量的列表中static dbTableDescriptor* chain,由于此时数据 ...
- C#中如何查找Dictionary中的重复值
简介 在这篇帮助文档中,我将向你展示如何实现c#里字典中重复值的查找.你知道的对于一个老鸟来说,这是非常简单的代码.但是尽管如此,这也是一篇对c#初学者非常有用的帮助文档. 背景 多数程序员对小型数据 ...
- C#中Hashtable、Dictionary详解以及写入和读取对比
转载:http://www.cnblogs.com/chengxingliang/archive/2013/04/15/3020428.html 在本文中将从基础角度讲解HashTable.Dicti ...
- C#中泛型之Dictionary
1.命名空间:System.Collections.Generic(程序集:mscorlib)2.描述: 1).从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组 ...
- js 利用数组实现类似于asp中的数据字典
---恢复内容开始--- 首先声明一个数组 var dictNew=new Array; var key; var value; for (var i = 0; i <50; i++) { // ...
- Oracle 中常用数据字典大总结
原文出处:小宝马的爸爸 - 梦想的家园 前面呢,也断断续续的介绍了一些诸如 Sql*Plus 等等关于 Oracle 的基本的内容, 对于 Oracle 这样的大型数据库呢,自身的运行和维护也是个不得 ...
随机推荐
- opencv基本函数详解笔记
一.读取保存图片 Mat scrImage = imread("1.jpg"); //显示图像 imshow("原图", scrImage); //窗口等待 w ...
- 25 bootstrap--v3--datetimepicker时间选择器--应用
在模板中引用响应的文件 比如: layout.html <link rel="stylesheet" href="{% static 'stark/plugins/ ...
- 19 request请求数据大全
1 request.path_info # 获取当前用户请求的url # http://127.0.0.1:8000/customer/list/ ----> /customer/list/ # ...
- python实现学生信息管理系统——界面版
前言(写于2022年5月17日) 这篇博客是我两年前大二时写的,一直放在草稿箱里,还没写完,现在快毕业了,突然翻出来了.虽然博客没写完,但早就写好了代码,可运行的exe文件以及文档.现在上传到gite ...
- Mixly智能门禁(物联网)
智能门禁arduino rc522读卡器 sg90舵机 校园卡我的校园卡号识别为 30fcb4a8d #include <RFID.h>#include <SPI.h>#in ...
- python起航之路 Day1
一.Python安装 windows 1.下载安装包 https://www.python.org/downloads/2.安装 默认安装路径:C:\python273.配置环境变量 [右键计算机]- ...
- @Transactional详细介绍
@Transactional在设置的时候有以下几个主要属性可以设置, 1.propagation:分别为事务的传播行为; 2.isolation:事务的隔离级别; 3.readOnly读写事务控制; ...
- VOIP(SIP)呼叫环境及流程试验
宿主机:win11 IP: .1 PHONE: 102 虚拟机: v11 IP: .129 SIP SERVER 虚拟机: v10 IP: .128 ...
- jxg项目Day5-关于项目打包
springboot项目中手动打包,加以下依赖: <parent> <artifactId>spring-boot-dependencies</artifactId> ...
- form表单 css的选择器和一些属性以及盒子模型,浮动
form表单 <form action='' method='' enctype=''> <input type='text'> input:更下type属性就可以得到对应的效 ...