C#中的数据字典Dictionary

db8de9f4d862d45c70d28a868b31dfe9.png

前言

今天上午和往常一样在网上冲浪,看到码甲哥微信群里面在聊一个面试题,比较有意思,这里简单分享下结论中的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等快很多

  • 键值对之间的偏序可以不定义

  • 可以实现通过键值查找、插入、删除一个键值对的操作,这些如果用数组实现非常麻烦

098c777d2f45f2394a02b7f3021dfebd.png

下面是关于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和valueforeach (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");}}
}

寄语

人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。

原创不易,给个关注。

我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发  谢谢。

80e29e0b84b06f4752f8a5c41ad1d656.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验 6 场景创建与执行 实验报告--软件功能测试与性能测试实验

下载链接&#xff1a; 下载链接&#xff1a; https://download.csdn.net/download/qq_44872173/20031798 内容&#xff1a;

2016年工作总结和计划

梧桐系统1、增加IT对接人、财务对接人功能开发 仲裁系统1、热敏面单未规范投诉开发2、图片统一存储和读取服务接口开发&#xff0c;提供内部调用的sdk 微信1、我要查件、自动订阅2、一键下单3、网点查询4、绑定手机号5、绑定专属业务员6、网点和业务员留言7、地址簿 待完成业务…

allegro下快捷键设置[转贴]

zz : http://yuandi6.blog.163.com/blog/static/207265185201210245435397/ 修改变量文件&#xff0c;设置自定义快捷键。 Allegro可以通过修改env文件来设置快捷键&#xff0c;这对于从其它软件如protle或PADS迁移过来的用户来说&#xff0c;可以沿用以前的操作习惯&#xff0…

改成中文版的_lol手游怎么改成中文版?英雄联盟手游中文版更改教程

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注&#xff01; 【免责声明】本文部分文字与图片资源来自于网络&#xff0c…

linux网络编程之慢系统调用被信号中断产生EINTR错误怎么解决总结

1、介绍慢系统调用 该术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用永远无法返回&#xff0c;多数网络支持函数都属于这一类。如&#xff1a;若没有客户连接到服务器上&#xff0c;那么服务器的accept调用就会一直阻塞。 慢系统调用可以被永久阻塞&#…

dotnet 替换 ASP.NET Core 的底层通讯为命名管道的 IPC 库

这是一个用于本机多进程进行 IPC 通讯的库&#xff0c;此库的顶层 API 是采用 ASP.NET Core 的 MVC 框架&#xff0c;其底层通讯不是传统的走网络的方式&#xff0c;而是通过 dotnetCampus.Ipc 开源项目提供的基于 NamedPipeStream 命名管道的方式进行通讯。相当于替换掉 ASP.N…

好想写点儿什么,但是不知道怎么写

自己已经上班了&#xff0c;但是有好多的时候还是做起事情没有一点毅力&#xff0c;不论是学习&#xff0c;还是追女生&#xff0c;还是想学习音乐。就像没有毕业的时候看C语言的书籍&#xff0c;看了一个星期&#xff0c;不想看了然后就不看了。书上面自己做的笔记过不了几天也…

上帝的玩偶:haXe语言

在动画片《我叫MT》中&#xff0c;有个“五火球神教”&#xff0c;五火球神教的口号是“征服世界”。在小说《风姿物语》中疯狂的白家的某代家主白拉登&#xff0c;他手中的扇子上写着“世界征服”四个大字。 疯狂&#xff01;只能用疯狂来形容。少年们&#xff0c;下面请看一群…

linux oracle手动启动两个实例

1、手工启动两个实例su - oraclelsnrctl start&#xff0d;&#xff0d;假设一个实例是orcl、另外一个是testexport ORACLE_SIDorclsqlplus / as sysdbastartupquitexport ORACLE_SIDtestsqlplus / as sysdbastartupquit 2、自动启动&#xff0c;可以在/etc/rc.local中设置&…

实验 7 场景运行监控及性能测试结果分析_实验报告--软件功能测试与性能测试实验

下载链接&#xff1a; 下载链接&#xff1a; https://download.csdn.net/download/qq_44872173/20031824 内容&#xff1a;

中yeti不能加载_将 PQ 查询加载到 Excel 中进行分析的三种常用的方式

点击上方蓝字 关注星标★不迷路岁月本长&#xff0c;忙者自促虽然大部分时候经过PQ清洗的数据都是加载到Excel工作表中&#xff0c;但是PQ中还有另外两种将数据返回Excel中进行分析的方法。三种不同的数据加载方式&#xff1a;Excel 智能表格仅限链接PowerPivot 数据模型一、加…

linux网络编程之用select函数实现io复用(基于TCP)引发的思考

1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:   (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。   (2)当一个客户同时处理多个套接口时,而这种情况是可能…

SQLite3.8.4.2在Windows平台下的编译和使用

2019独角兽企业重金招聘Python工程师标准>>> SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. SQLite is the most widely deployed SQL database engine in the world. The …

【招聘(北京武汉)】北京高远华信科技 .NET 高级工程师

职位名称&#xff1a;.NET Core 高级工程师培养方向&#xff1a;架构师、技术总监月薪&#xff1a;15k-20k工作地点&#xff1a;北京、武汉职位信息1、理解后端架构&#xff0c;与后端工程师配合&#xff0c;为项目提供最优化的.NET Core技术解决方案&#xff1b;2、根据项目要…

通过邮箱远程控制电脑

转自本人在知乎上面的答案印如意Fitz 通过往邮箱发送邮件&#xff0c;从而达到控制电脑or开始抓取数据or播放音乐等系列操作。 like that: 先用我的常用邮箱给我备胎邮箱发送一封主题为“shutdown”的邮件 然后我要关机的电脑检测到了自动关机并发挥一封主题为“already shutdo…

上海纳税百强2016,邢台2017纳税百强,深圳百强企业

上海纳税百强企业名单公布。市税务部门组织的税收收入达到11847.0亿元&#xff0c;同比增长5.5%&#xff0c;增收616.6亿元&#xff1b;剔除证券交易印花税后&#xff0c;税收收入完成11380.6亿元&#xff0c;同比增长15.1%&#xff0c;其中&#xff0c;第三产业税收收入完成81…

Oracle DBA

实验7 Oracle数据库安全管理 1&#xff0e;实验目的 &#xff08;1&#xff09;掌握Oracle数据库安全控制的实现。 &#xff08;2&#xff09;掌握Oracle数据库用户管理。 &#xff08;3&#xff09;掌握Oracle数据库权限管理。 &#xff08;4&#xff09;掌握Oracle数据…

linux c之STDIN_FILENO的作用及与stdin的区别

1.STDIN_FILENO的作用 STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。 操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。 2…

c++ 对象起始地址 指针靠齐_你需要知道的各种指针运算

数组的某个成员可以用数组的基地址加上一个偏移量来表示。我们可以声明一个指针double *p;&#xff0c;把它作为基地址&#xff0c;然后就可以像数组一样在这个基地址上使用偏移量。在基地址上&#xff0c;我们可以找到第1个成员p[0]的内容&#xff0c;在基地址上前进一步可以找…

2014,成为更好程序员的7个方法

2019独角兽企业重金招聘Python工程师标准>>> // 译注&#xff1a;英文原文发布今年年初&#xff0c;所以开头提到了”新年“&#xff0c;请不要惊讶~ 程序员总是有很多的决定&#xff0c;不是吗&#xff1f;如果你的新年待办事项还是空白的话&#xff0c;那么可以考…