浅谈Dictionary用法
一.基础篇
1.Dictionary泛型类提供了从一组键到一组值的映射,即键和值的集合类。
2.Dictionary通过键来检索值的速度是非常快的,这是因为 Dictionary 类是作为一个哈希表来实现的。
3.定义方式:
Dictionary<[Key], [Value]> openWith = new Dictionary<[Key], [Value]>();
其中:Key代表此泛型类的键,不可重复。
Value代表此泛型类中键对应的值。
Key和Value可以用int,decimal,float等值类型,也可以用string,class等引用类型。
举例:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Test(); } public void Test() { //Key为值类型 Value为值类型 Dictionary<int, int> dicInt = new Dictionary<int, int>(); //Key为值类型 Value为引用类型 Dictionary<int, string> dicString = new Dictionary<int, string>(); //Key为引用类型 Value为引用类型 Dictionary<TestInfo, TestInfo> dicTestClass = new Dictionary<TestInfo, TestInfo>(); } } public class TestInfo { public string ID { get; set; } public string Name { get; set; } public string Pwd { get; set; } } }
4.添加键值对的方式:
①Dictionary.Add(Key,Value)方式:

//Key为值类型 Value为引用类型 Dictionary<int, string> dicString = new Dictionary<int, string>(); dicString.Add(0,"00001"); dicString.Add(1, "00002"); dicString.Add(2, "00003"); dicString.Add(3, "00004");
②Dictionary[Key]=Value 方式:

//Key为值类型 Value为引用类型 Dictionary<int, string> dicString = new Dictionary<int, string>(); dicString[0] = "00001"; dicString[1] = "00002"; dicString[2] = "00003"; dicString[3] = "00004";
③两种方式对比:
相同:二者皆可添加键值对。
差异:第一种方式,当键不存在,相当于插入此键值对,当插入重复键时,则会引发ArgumentException类型的异常。
第二种方式,当键不存在,相当于插入此键值对,当键存在时,相当于修改该键对应的值;当Dictionary[Key]取值
时,如果此Key不存在,则会引发KeyNotFoundException异常。
总结:添加键值对,推荐以第二种为主。
二.进阶篇
1.ContainsKey(Key)判断键中是否含有此Key

//Key为值类型 Value为引用类型 Dictionary<int, string> dicString = new Dictionary<int, string>(); dicString[0] = "00001"; dicString[1] = "00002"; dicString[2] = "00003"; dicString[3] = "00004"; if (dicString.ContainsKey(4)) { Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('存在该键');</script>"); } else { Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('不存在该键');</script>"); }
2.ContainsValue(Value)判断值中是否含有此Value

//Key为值类型 Value为引用类型 Dictionary<int, string> dicString = new Dictionary<int, string>(); dicString[0] = "00001"; dicString[1] = "00002"; dicString[2] = "00003"; dicString[3] = "00004"; if (dicString.ContainsValue("00004")) { Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('存在该值');</script>"); } else { Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('不存在该值');</script>"); }
3.Foreach和KeyValuePair<Key, Value>配合取出所有键值对

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //Key为值类型 Value为引用类型 Dictionary<int, string> dicString = new Dictionary<int, string>(); dicString[0] = "00001"; dicString[1] = "00002"; dicString[2] = "00003"; dicString[3] = "00004"; foreach (KeyValuePair<int, string> item in dicString) { Console.WriteLine("Key={0},Value={1}",item.Key,item.Value); } Console.ReadKey(); } } }
4.Dictionary.Keys,Dictionary.Values和foreach配合取出所有key,所有value。(也可以利用第三步中单独取key和value)

//取出所有key foreach (int key in dicString.Keys) { Console.WriteLine("Key={0}", key); } //取出所有value foreach (string value in dicString.Values) { Console.WriteLine("Value={0}",value); }
5.Dictionary.Clear()和Dictionary.Remove(Key)移除键值对

//移除所有的键和值 dicString.Clear(); //移除键为0的键值对 dicString.Remove(0);
6.Dictionary.Reverse()进行反转序列输出

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //Key为值类型 Value为引用类型 Dictionary<int, string> dicString = new Dictionary<int, string>(); dicString[0] = "00001"; dicString[1] = "00002"; dicString[2] = "00003"; dicString[3] = "00004"; //原始排序输出 foreach (KeyValuePair<int,string> item in dicString) { Console.WriteLine("Key={0},Value={1}",item.Key,item.Value); } //进行反转排序,存入iList IEnumerable<KeyValuePair<int,string>> iList = dicString.Reverse(); Console.WriteLine("-----------------------------------------"); //反转输出 foreach (KeyValuePair<int, string> item in iList) { Console.WriteLine("Key={0},Value={1}", item.Key, item.Value); } Console.ReadKey(); //输出结果如下: /* Key=0,Value=00001 Key=1,Value=00002 Key=2,Value=00003 Key=3,Value=00004 ------------------------------------------------ Key=3,Value=00004 Key=2,Value=00003 Key=1,Value=00002 Key=0,Value=00001 */ } } }
出处:http://www.cnblogs.com/xilipu31/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?