营销型网站建设实战环保主题静态网站模板

张小明 2026/1/12 13:07:02
营销型网站建设实战,环保主题静态网站模板,养生网站策划,管理咨询公司主要做什么C# 字典(Dictionary)教程#xff1a;从基础到高级应用 字典(Dictionary)是C#中最常用的集合类型之一#xff0c;它存储键值对(Key-Value Pair)并提供高效的查找功能。本教程将全面介绍C#中字典的使用方法#xff0c;包括基本操作、高级特性和实际应用场景。 1. 字典的基本概…C# 字典(Dictionary)教程从基础到高级应用字典(Dictionary)是C#中最常用的集合类型之一它存储键值对(Key-Value Pair)并提供高效的查找功能。本教程将全面介绍C#中字典的使用方法包括基本操作、高级特性和实际应用场景。1. 字典的基本概念字典是一种关联集合具有以下特点键值对存储每个元素由一个唯一的键(Key)和一个关联的值(Value)组成快速查找通过键可以快速访问对应的值平均时间复杂度为O(1)唯一键字典中的键必须是唯一的不能重复无序性.NET中的字典不保证元素的顺序(虽然.NET Core 3.0提供了有序字典)2. 创建字典2.1 基本创建方式usingSystem;usingSystem.Collections.Generic;classProgram{staticvoidMain(){// 创建空字典(非泛型不推荐)DictionarydictionarynewDictionary();// 创建泛型字典(推荐)Dictionarystring,intageDictionarynewDictionarystring,int();// 使用集合初始化器Dictionarystring,stringcapitalDictionarynewDictionarystring,string{{China,Beijing},{USA,Washington D.C.},{Japan,Tokyo}};}}推荐使用泛型版本DictionaryTKey, TValue它提供了类型安全性和更好的性能。2.2 指定比较器可以自定义键的比较方式// 不区分大小写的字符串比较器Dictionarystring,intcaseInsensitiveDictnewDictionarystring,int(StringComparer.OrdinalIgnoreCase);caseInsensitiveDict.Add(apple,1);Console.WriteLine(caseInsensitiveDict[APPLE]);// 输出13. 基本操作3.1 添加元素(Add)Dictionarystring,intscoresnewDictionarystring,int();scores.Add(Alice,90);scores.Add(Bob,85);// 尝试添加重复键会抛出异常try{scores.Add(Alice,95);// 抛出ArgumentException}catch(Exceptionex){Console.WriteLine($错误:{ex.Message});}3.2 安全添加元素使用索引器或TryAdd(需要.NET 6)可以避免异常// 方法1: 使用索引器(如果键存在则更新值)scores[Alice]95;// 更新Alice的分数// 方法2: 使用TryAdd(.NET 6)booladdedscores.TryAdd(Charlie,88);// 返回true表示添加成功3.3 访问元素// 通过键访问值intaliceScorescores[Alice];// 如果键不存在会抛出KeyNotFoundException// 安全访问方式if(scores.TryGetValue(Bob,outintbobScore)){Console.WriteLine($Bob的分数是:{bobScore});}else{Console.WriteLine(未找到Bob的分数);}3.4 检查键是否存在boolhasAlicescores.ContainsKey(Alice);// trueboolhasDavidscores.ContainsKey(David);// false3.5 检查值是否存在boolhas90scores.ContainsValue(90);// true3.6 移除元素// 方法1: 通过键移除boolremovedscores.Remove(Bob);// 返回true表示成功移除// 方法2: 通过键值对移除(.NET 6)boolremoved2scores.Remove(newKeyValuePairstring,int(Alice,95));3.7 清空字典scores.Clear();Console.WriteLine($字典中现在有{scores.Count}个元素);// 输出04. 完整示例usingSystem;usingSystem.Collections.Generic;classDictionaryExample{staticvoidMain(){// 创建并初始化字典Dictionarystring,doubleproductPricesnewDictionarystring,double{{Apple,1.20},{Banana,0.50},{Orange,0.80}};// 添加新元素productPrices.Add(Pear,1.00);// 更新元素productPrices[Apple]1.50;// 安全获取元素if(productPrices.TryGetValue(Banana,outdoublebananaPrice)){Console.WriteLine($香蕉的价格是: ${bananaPrice:F2});}// 遍历字典Console.WriteLine(\n所有产品价格:);foreach(KeyValuePairstring,doubleproductinproductPrices){Console.WriteLine(${product.Key}: ${product.Value:F2});}// 移除元素productPrices.Remove(Orange);Console.WriteLine($\n移除后字典中有{productPrices.Count}个产品);}}5. 高级用法5.1 遍历字典Dictionaryint,stringemployeesnewDictionaryint,string{{101,Alice},{102,Bob},{103,Charlie}};// 遍历键值对foreach(KeyValuePairint,stringemployeeinemployees){Console.WriteLine($ID:{employee.Key}, 姓名:{employee.Value});}// 只遍历键foreach(intidinemployees.Keys){Console.WriteLine($ID:{id});}// 只遍历值foreach(stringnameinemployees.Values){Console.WriteLine($姓名:{name});}5.2 字典排序字典本身是无序的但可以转换为有序集合// 按键排序Dictionarystring,intunsortedDictnewDictionarystring,int{{Zebra,5},{Apple,1},{Banana,2}};// 按键排序并创建新字典SortedDictionarystring,intsortedByKeynewSortedDictionarystring,int(unsortedDict);// 按值排序(需要LINQ)varsortedByValueunsortedDict.OrderBy(xx.Value).ToDictionary(xx.Key,xx.Value);5.3 字典并发操作在多线程环境中可以使用ConcurrentDictionaryTKey, TValueusingSystem.Collections.Concurrent;ConcurrentDictionarystring,intconcurrentDictnewConcurrentDictionarystring,int();// 线程安全添加concurrentDict.TryAdd(Key1,100);// 线程安全更新concurrentDict.AddOrUpdate(Key1,key200,// 如果键不存在时的添加值(key,oldValue)oldValue50);// 如果键存在时的更新逻辑// 线程安全获取或添加intvalueconcurrentDict.GetOrAdd(Key2,key300);5.4 字典与数组/列表转换Dictionarystring,intdictnewDictionarystring,int{{a,1},{b,2},{c,3}};// 转换为键数组string[]keysdict.Keys.ToArray();// 转换为值数组int[]valuesdict.Values.ToArray();// 从两个列表创建字典ListstringnamesnewListstring{Alice,Bob,Charlie};ListintidsnewListint{101,102,103};Dictionaryint,stringidToNameDictnames.Select((name,index)new{name,index}).ToDictionary(xids[x.index],xx.name);6. 实际应用场景6.1 缓存实现publicclassSimpleCacheTKey,TValue{privatereadonlyDictionaryTKey,TValuecachenewDictionaryTKey,TValue();privatereadonlyTimeSpanexpirationTime;privatereadonlyDictionaryTKey,DateTimeexpirationTimesnewDictionaryTKey,DateTime();publicSimpleCache(TimeSpanexpirationTime){this.expirationTimeexpirationTime;}publicvoidAdd(TKeykey,TValuevalue){cache[key]value;expirationTimes[key]DateTime.Now.Add(expirationTime);}publicboolTryGetValue(TKeykey,outTValuevalue){if(cache.TryGetValue(key,outvalue)){if(expirationTimes.TryGetValue(key,outDateTimeexpiration)DateTime.Nowexpiration){returntrue;}else{cache.Remove(key);expirationTimes.Remove(key);returnfalse;}}returnfalse;}}6.2 统计词频stringtexthello world hello csharp world hello;string[]wordstext.Split(new[]{ },StringSplitOptions.RemoveEmptyEntries);Dictionarystring,intwordCountsnewDictionarystring,int();foreach(stringwordinwords){if(wordCounts.ContainsKey(word)){wordCounts[word];}else{wordCounts[word]1;}}// 使用LINQ更简洁的实现varwordCountsLinqwords.GroupBy(ww).ToDictionary(gg.Key,gg.Count());6.3 配置管理publicclassConfigurationManager{privatereadonlyDictionarystring,stringsettingsnewDictionarystring,string{{Server,localhost},{Port,8080},{Timeout,30}};publicstringGetSetting(stringkey,stringdefaultValue){returnsettings.TryGetValue(key,outstringvalue)?value:defaultValue;}publicvoidSetSetting(stringkey,stringvalue){settings[key]value;}}7. 性能考虑查找性能字典的查找、添加和删除操作的平均时间复杂度为O(1)哈希冲突当多个键产生相同的哈希码时会影响性能良好的键类型选择很重要容量规划字典在容量不足时会自动扩容可以预先指定容量减少扩容次数Dictionaryint,stringdictnewDictionaryint,string(capacity:1000);键类型选择优先选择值类型或不可变引用类型作为键避免使用可变对象作为键8. 与类似集合的比较集合类型特点DictionaryTKey, TValue键值对集合快速查找键唯一SortedDictionaryTKey, TValue基于红黑树实现按键排序查找O(log n)SortedListTKey, TValue按键排序的键值对集合值也按键排序查找O(log n)插入删除性能较差ConcurrentDictionaryTKey, TValue线程安全的字典适合多线程环境LookupTKey, TElement表示一个键到多个值的映射键唯一但值不唯一总结C#中的字典(DictionaryTKey, TValue)是一种强大且高效的数据结构适用于需要快速查找和关联存储的场景。通过本教程你应该已经掌握了字典的基本概念和创建方式字典的增删改查操作字典的高级特性和并发处理字典的实际应用场景字典与其他类似集合的区别
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

电子商务网站业务流程网络规划设计师考试通过率

软件定义串口:用虚拟串行端口驱动构建高效数据中继系统你有没有遇到过这样的场景?一台工控机只有两个物理串口,却要对接十几个Modbus设备;开发阶段硬件还没到位,软件团队只能干等;多个程序争抢同一个COM口&…

张小明 2026/1/10 16:08:18 网站建设

网站建设不用备案的创意网站页面

EmotiVoice与VITS对比分析:两者适用场景有何不同? 在AI语音合成技术迅速普及的今天,我们早已不再满足于“能说话”的机器。无论是虚拟主播的一句带笑的开场白,还是智能助手轻声安慰的温柔语调,用户期待的是有情绪、有个…

张小明 2026/1/10 16:08:22 网站建设

百度竞价 十一 pc网站 手机网站网站建设彩票

4位量化革命:SVDQuant技术让12B参数FLUX.1模型在消费级GPU上流畅运行 【免费下载链接】nunchaku-flux.1-krea-dev 项目地址: https://ai.gitcode.com/hf_mirrors/nunchaku-tech/nunchaku-flux.1-krea-dev 在生成式AI技术快速发展的今天,硬件限制…

张小明 2026/1/10 3:17:23 网站建设

安徽建设厅官方网站洛阳专业做网站公司

第一章:Open-AutoGLM电脑版部署避坑指南概述在本地部署 Open-AutoGLM 电脑版过程中,开发者常因环境配置、依赖版本不匹配或权限设置不当而遭遇启动失败、模型加载异常等问题。本章旨在系统梳理部署全流程中的常见“陷阱”,并提供可落地的解决…

张小明 2026/1/10 16:08:24 网站建设

网站备案撤销原因建设门户网站的目的

STM32串口通信防错利器:奇偶校验实战全解析 在工业现场,你是否遇到过这样的问题——传感器明明工作正常,但主控却读到了莫名其妙的数据?电机启停时,通信突然中断,重启后又恢复正常?这些“偶发性…

张小明 2026/1/9 22:59:08 网站建设

高唐建筑公司网站jsp电商网站开发流程

简介 本文介绍如何使用LangChain和FastAPI构建生产级工具增强型LLM Agent,实现token流式输出、代码执行和搜索能力。通过FastAPI异步能力和SSE实现低延迟流式传输,集成Python REPL、搜索API和PostgreSQL工具。这种Agent不仅能生成文本,还能使…

张小明 2026/1/12 12:25:06 网站建设