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 这样的大型数据库呢,自身的运行和维护也是个不得 ...
随机推荐
- 关于DELL服务器风扇远程控制失效
关于DELL服务器风扇远程ipmitool控制失效 去年12月,公司突然断电,公司有一台DELL 720XD服务器,自从断电之后,使用ipmitool命令行控制风扇速度就失效了,因为之前忙其他的项目, ...
- java pta第三次阶段性总结
一.前言 这是这学期最后一次总结,这三次的pta大作业也是最后一次,这几次大作业主要写了电信计费系统的主要功能,第一次大作业是座机计费功能,第二次大作业是手机计费功能,第三次大作业是短信计费的功能.这 ...
- 【Android异常】关于静态注册BroadcastReceiver接收不到系统广播的问题
如果你静态注册的广播无法接收到消息,请先检查下:你的安卓版本是不是8.0+ 前言Google官方声明:Beginning with Android 8.0 (API level 26), the sy ...
- C的基础常识
C是可移植性语言,因此可以在许多环境中使用,包括UNIX.Linux.MS-DOS.Windows和Macintosh OS. 使用C语言编写的内容的文本,称为源代码文件(source code fi ...
- Linux系列---【U盘插入后,linux系统如何查看U盘中的内容?】
U盘插入后,linux系统如何查看U盘中的内容? 1.插入U盘 2.输入命令查看U盘是否插入成功 sudo fdisk -l 输入上面命令后,在最下面Device Boot一栏查看自己的U盘所在的分区 ...
- 实验二 实验二 Linux系统简单文件操作命令
项目 内容 这个作业属于哪个课程 <班级课程的主页链接> 这个作业的要求在哪里 <作业要求链接接地址> 学号-姓名 15043109吴小怀 作业学习目标 学习在Linux系统终 ...
- gitbash 本地文件提交为一个新的项目 到 gitlab
此篇操作的环境: 已经配置好一个本地仓库,且可成功的将本地项目提交到gitlab上的对应的远程仓库. 这意味着此时你的电脑已经安装好git,有一个本地仓库存放你的项目,成功配置好一个对应的远程仓库,且 ...
- NOIP2015普及组
T1 金币 很简单的题,控制天数这个变量 #include<iostream> #include<cstring> #include<cmath> #include ...
- Vue3 向window注入方法 TS警告 元素隐式具有 "any" 类型,因为索引表达式的类型不为 "number" 问题解决。
window['funcName'] = function(){}; // 'funcName'会标红警告 (window as any).funcName = function(){}; // 正确 ...
- 07.异常、多线程、Lambda 表达式
一.异常 指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止. 异常体系 根类 java.lang.Throwable 两个直接子类 java.lang.Error 严重错误Er ...