【C#】 SortedDictionary,查找字典中是否存在给定的关键字

欢迎来到《小5讲堂》
这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 背景
  • 场景说明
  • 红黑树原理
  • 判断代码
  • Dictionary
  • 知识点
  • 相关文章

背景

最近有小伙伴咨询C#相关基础知识点SortedDictionary,
说实在的,这个类我也很少用,从字面上理解就是一个键值对,并且是含自动排序的键值对。
如果直接查询不存在的关键词,那么会直接报错,因此本篇文章来简单讲讲关键词判断

场景说明

SortedDictionary<TKey, TValue> 是C#中的一种集合类型,它实现了IDictionary<TKey, TValue> 接口,可以存储键-值对并按键排序。
SortedDictionary基于红黑树实现,因此其插入、删除和查找操作的复杂度为O(log n),适合需要按键排序的场景。
SortedDictionary中的键必须是唯一的。
与Dictionary<TKey, TValue>不同的是,SortedDictionary会按键的比较顺序自动对键进行排序。
SortedDictionary比Dictionary有更高的查找开销,但可以提供快速的有序遍历。
可以使用SortedDictionary来存储需要按键排序的键值对,并快速查找、插入、删除和遍历它们。

红黑树原理

红黑树是一种自平衡的二叉搜索树,它在每个节点上都会增加一个额外的表示节点颜色的属性(通常为红色或黑色),并且满足以下几个性质:
1.每个节点要么是红色,要么是黑色。
2.根节点是黑色。
3.每个叶子节点(NIL节点,空节点)是黑色。
4.如果一个节点是红色的,则其子节点必须是黑色的。
5.从任一节点到其每个叶子节点的所有路径上,黑色节点的数量相同。
通过这些性质,红黑树保持了一种平衡,使得任何一条路径上的黑色节点数量差不多,从而确保了树的高度不会过高,最坏情况下的查找、插入和删除操作的时间复杂度为O(log n)。
红黑树的自平衡性质使得它在插入或删除节点时能够通过旋转和重新着色等操作来保持树的平衡。这种特性使得红黑树在需要频繁插入、删除操作的数据结构中具有很好的性能表现。

判断代码

默认情况下,若不做判断会报错

The given key ‘request_result’ was not present in the dictionary.
字典中不存在给定的关键字“request_result”。

在这里插入图片描述

SortedDictionary<string, object> dict = new SortedDictionary<string, object>();// 添加一些键值对
dict.Add("key1", "value1");
dict.Add("key2", 123);
dict.Add("key3", true);// 判断是否包含关键词
string keyword = "key2";
if (dict.ContainsKey(keyword))
{Console.WriteLine($"Found keyword {keyword}");
}
else
{Console.WriteLine($"Keyword {keyword} not found");
}

Dictionary

在C#中,可以使用Dictionary<TKey, TValue>的ContainsKey方法来查找字典中是否存在给定的关键字。
该方法接受一个键作为参数,如果字典中包含该键则返回true,否则返回false。
下面是一个示例代码:

using System;
using System.Collections.Generic;class Program
{static void Main(){Dictionary<string, int> dictionary = new Dictionary<string, int>();dictionary.Add("apple", 1);dictionary.Add("banana", 2);string keyToFind = "banana";if (dictionary.ContainsKey(keyToFind)){Console.WriteLine($"The key '{keyToFind}' exists in the dictionary.");}else{Console.WriteLine($"The key '{keyToFind}' does not exist in the dictionary.");}}
}

在上面的示例中,创建了一个Dictionary<string, int>对象,并向其中添加了两个键值对。
然后我们使用ContainsKey方法来查找是否存在给定的关键字,并输出结果。

知识点

1.二叉查找树
二叉查找树(Binary Search Tree,BST),是一种二叉树,具有一定的排序性质,对于每个节点,左子树上所有节点的值都小于该节点的值,右子树上所有节点的值都大于该节点的值。在最坏情况下,BST的高度可能会达到O(n),导致查找、插入和删除操作的时间复杂度变成O(n)。

2.AVL树
是一种自平衡的二叉搜索树,通过维护每个节点的平衡因子(左子树高度和右子树高度的差)为-1、0、1来保持树的平衡。AVL树确保了树的高度不会过高,从而保证了查找、插入和删除操作的时间复杂度为O(log n)。

3.B树和B+树
是一种多路搜索树,用于在内存和磁盘上存储大量数据。B树和B+树通过在一个节点中存储多个键值对来减少树的高度,从而减少查找的开销。B+树相比于B树更适合作为数据库索引的数据结构,因为B+树的叶子节点构成了一个有序链表,便于范围查询和范围遍历。

相关文章

【C#】 SortedDictionary,查找字典中是否存在给定的关键字

【C#】.net core 6.0 MVC返回JsonResult显示API接口返回值不可被JSON反序列化

【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇

【C#】约瑟夫原理举例2个代码实现

【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推

【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

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

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

相关文章

全网最详细IOS系统APP上架教程(一)

准备材料 1、邮箱 2、手机号 3、官网&#xff08;网站必须能打的开&#xff0c;且为一级域名&#xff0c;域名必须与组织相关联&#xff09; 4、公司信息 5、申请人名字、电话号码、邮箱、身份证号码&#xff08;注册过程中会需要人脸识别认证&#xff09; 7、需要苹果手机和苹…

以太网技术介绍

随着通信和计算机技术的不断发展&#xff0c;无论是骨干网还是接入网&#xff0c;以太网都已成为应用场景最多&#xff0c;应用范围最广泛的技术之一。对于初次应用以太网的读者&#xff0c;本文主要给出以太网技术的基础知识&#xff0c;并对以太网涉及的部分协议进行简要说明…

【csdn】数据工程实践:从网络抓取到API调用,解析共享单车精准投放所需要的数据

共享单车作为一种便捷的出行方式&#xff0c;有效缓解了“最后一公里”难题&#xff0c;同时促进了绿色出行。然而&#xff0c;在高峰时段&#xff0c;供需不均和停车难成为普遍挑战&#xff0c;尤其是在通勤时间&#xff0c;热门地点如地铁站附近和办公区常常面临车辆短缺或停…

【程序设计和c语言-谭浩强配套】(适合专升本、考研)

一晃大半年没更新了&#xff0c;这一年一直在备考&#xff0c;想着这几天把前段时间学的c语言给大家分享一下&#xff0c;在此做了一个专栏&#xff0c;有需要的小伙伴可私信获取o。 简介&#xff1a;本专栏所有内容皆适合专升本、考研的复习资料&#xff0c;本人手上也有日常…

C# WinForm —— 13 ComboBox下拉框/组合框介绍

1. 简介 ComboBox 是由 textBox 和 listBox 组合而成的&#xff0c;只能选择一项&#xff0c;不能选择多项&#xff0c;其他功能和 listBox类似 ComboBox 下拉框的三种样式&#xff1a;&#xff08;通过 DropDownStyle属性 设置&#xff09; Simple: 最简单的样式&#xff0c…

联合有爱,光照未来

随着社会的进步和人们生活水平的提高&#xff0c;越来越多的家庭开始关注儿童的成长和教育。然而&#xff0c;仍有部分地区的儿童因资源匮乏、经济困难等原因&#xff0c;面临着生活和学习上的种种挑战。为了传递社会的温暖和关爱&#xff0c;改善有实际困难的学校及学生的学习…

Win32 API

Win32 API Windows 这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&#xff0c; 它同时也是⼀个很⼤ 的服务中⼼&#xff0c;调⽤这个服务中⼼的各种服务&#xff08;每⼀种服务就是⼀个函数&#xff09;&#xff0c;可以帮应⽤程序达到开启 视窗、描绘图形…

【免费Java系列】大家好 ,今天是学习面向对象高级的第十一天点赞收藏关注,持续更新作品 !

这是java进阶课面向对象第一天的课程可以坐传送去学习http://t.csdnimg.cn/Lq3io day11-特殊文件、日志技术、多线程 一、属性文件 1.1 特殊文件概述 同学们&#xff0c;前面我们学习了IO流&#xff0c;我们知道IO流是用来读、写文件中的数据。但是我们接触到的文件都是普通…

QT 小项目:登录注册账号和忘记密码(下一章实现远程登录)

一、环境搭建 参考上一章环境 二、项目工程目录 三、主要源程序如下&#xff1a; registeraccountwindow.cpp 窗口初始化&#xff1a; void registeraccountWindow::reginit() {//去掉&#xff1f;号this->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButt…

初识指针(4)<C语言>

前言 前面的文章&#xff0c;已经对指针的基础概念以及运用有了初步了解&#xff0c;我们可以进一步探究指针比较深入的知识&#xff0c;下文将主要介绍&#xff1a;使用指针数组模拟二维数组、字符指针变量、数组指针、二维数组传参的本质、函数指针、typedef关键字等。 目录…

怎么让电脑耳机和音响都有声音

电脑耳机音响不能同时用没声音怎么办 一般来说&#xff0c;重新开机后问题能够得到解决。右击“我的电脑”---“属性”---“硬件”---“设备管理器”&#xff0c;打开“声音、视频和游戏控制器”有无问题&#xff0c;即看前面有没有出现黄色的“”。 如果您的 电脑 耳机能正常…

【MsSQL】数据库基础 库的基本操作

目录 一&#xff0c;数据库基础 1&#xff0c;什么是数据库 2&#xff0c;主流的数据库 3&#xff0c;连接服务器 4&#xff0c;服务器&#xff0c;数据库&#xff0c;表关系 5&#xff0c;使用案例 二&#xff0c;库的操作 1&#xff0c;创建数据库 2&#xff0c;创建…