当前位置: 首页 > news >正文

C# 基础之字典——Dictionary(一)

一、前言#

对于C#中的Dictionary类相信大家都不陌生,这是一个Collection(集合)类型,可以通过Key/Value(键值对的形式来存放数据;该类最大的优点就是它查找元素的时间复杂度接近O(1),实际项目中常被用来做一些数据的本地缓存,提升整体效率。

二、字典的基本使用

 static void Main(string[] args){// 1.定义// Key和Value可以是任意类型Dictionary<int, string> _testDic = new Dictionary<int, string>();// 2.添加元素_testDic.Add(24, "Canon");// 注意相同相同Key值只能Add一次_testDic.Add(24, "Jason");// 报错:System.ArgumentException:“已添加了具有相同键的项。”// 可以使用ContainsKey判断字典中是否已经存在if (!_testDic.ContainsKey(24)) _testDic.Add(24, "Canon");// 3.删除元素// Remove 删除不存在的值不会报错_testDic.Remove(24);// 4.取值// 索引器取值,若字典中没有Key会报错string str = _testDic[24];// TryGetValue 取值成功返回true,内部对str赋值,否则返回falsebool isExist = _testDic.TryGetValue(24, out str);// 5.改值// 要确保字典中确实存在该值if (_testDic.ContainsKey(1)) _testDic[1] = "";// 6.遍历// Keyforeach (var key in _testDic.Keys) Console.WriteLine("Key = {0}", key);// Valueforeach (var value in _testDic.Values) Console.WriteLine("value = {0}", value);// foreach遍历foreach (var kvp in _testDic) Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);// 迭代器遍历var enumerator = _testDic.GetEnumerator();while (enumerator.MoveNext()){var kvp = enumerator.Current;Console.WriteLine("Key = {0}", kvp.Key);Console.WriteLine("Key = {0}", kvp.Value);}// 7.清空_testDic.Clear();}

            // 定义Dictionary<string, string> dictExecutes = new Dictionary<string, string>();// 添加元素dictExecutes.Add("bmp", "paint.exe");dictExecutes.Add("dib", "paint.exe");dictExecutes.Add("rtf", "wordpad.exe");dictExecutes.Add("txt", "notepad.exe");// 取值Console.WriteLine("For key = 'rtf', value = {0}.", dictExecutes["rtf"]);// 改值dictExecutes["rtf"] = "winword.exe";Console.WriteLine("For key = 'rtf', value = {0}.", dictExecutes["rtf"]);// 遍历 KEYforeach (string key in dictExecutes.Keys) Console.WriteLine("Key = {0}", key);// 遍历 VALUEforeach (string value in dictExecutes.Values) Console.WriteLine("value = {0}", value);// 遍历字典foreach (KeyValuePair<string, string> kvp in dictExecutes) Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
// 添加存在的元素
try{dictExecutes.Add("txt", "winword.exe");
}catch( ArgumentException ){Console.WriteLine("An element with Key = 'txt' already exists.");
}// 删除元素
dictExecutes.Remove("doc");
if( !dictExecutes.ContainsKey("doc") ) Console.WriteLine("Key 'doc' is not found.");// 判断键存在
if( openWith.ContainsKey("bmp") ) Console.WriteLine("An element with Key = 'bmp' exists.");

参数为其它类型

// 参数为其它类型 
Dictionary<int, string[]> dictOthers = new Dictionary<int, string[]>();
dictOthers.Add(1, "1,11,111".Split(','));
dictOthers.Add(2, "2,22,222".Split(','));
Console.WriteLine(dictOthers[1][2]);

参数为自定义类型

// 首先定义类
class DouCube
{private int _Code;public int Code { get{ return _Code; } set{ _Code = value; } }private string _Page;public string Page { get{ return _Page; } set{ _Page = value; } } 
}// 声明并添加元素
Dictionary<int, DouCube> MyTypes = new Dictionary<int, DouCube>();
for( int i = 1; i <= 9; i++ ){DouCube elem = new DouCube();elem.Code = i * 100;elem.Page = "http://www.doucube.com/" + i.ToString() + ".html";MyTypes.Add(i, elem);
}// 遍历元素
foreach( KeyValuePair<int, DouCube> kvp in MyTypes ){Console.WriteLine("Index {0} Code:{1} Page:{2}", kvp.Key, kvp.Value.Code, kvp.Value.Page);
}

相关文章:

  • QVariant用法(AI ChaptGPT)
  • 【设计模式深度剖析】【4】【创建型】【建造者模式】| 类比选购汽车的过程,加深理解
  • ubuntu设置root开机登录,允许root用户ssh远程登录
  • 大模型落地竞逐,云计算大厂“百舸争流”
  • 【MySQL精通之路】InnoDB(7)-锁和事务模型(2)-事务模型
  • MQTT 异常断开(一)
  • 网络模型-Qinq配置与应用
  • 每日5题Day5 - LeetCode 21 - 25
  • jiebaNET中文分词器
  • 水平垂直居中的六种方法
  • 添加webpack.config.js配置
  • 三分钟学会视频号卖货,真的太简单了!
  • webgl three 模型操作
  • 【C++】特殊类设计 | 单例设计模式
  • 一、QGroundControl地面站使用介绍
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Javascript弹出层-初探
  • Javascript基础之Array数组API
  • Linux gpio口使用方法
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • VuePress 静态网站生成
  • 从零开始在ubuntu上搭建node开发环境
  • 关于使用markdown的方法(引自CSDN教程)
  • 理解在java “”i=i++;”所发生的事情
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 最简单的无缝轮播
  • 白色的风信子
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • (2015)JS ES6 必知的十个 特性
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)u-boot-nand.bin的下载
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转载)利用webkit抓取动态网页和链接
  • .bashrc在哪里,alias妙用
  • .gitignore不生效的解决方案
  • .Net 6.0 Windows平台如何判断当前电脑是否联网
  • .Net core 6.0 升8.0
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET6 命令行启动及发布单个Exe文件
  • .NET使用存储过程实现对数据库的增删改查
  • .skip() 和 .only() 的使用
  • // an array of int
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @31省区市高考时间表来了,祝考试成功
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • @WebServiceClient注解,wsdlLocation 可配置