【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://xiahunao.cn/news/3031761.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

六西格玛遇上AI:质量提升进入“快车道”

人工智能&#xff08;AI&#xff09;与六西格玛管理方法——正在慢慢接近我们的视野中&#xff0c;预示着在质量管理中一场改革重大改革将要到来。 AI&#xff0c;作为科技的前沿&#xff0c;正以其强大的数据处理能力和机器学习能力&#xff0c;为质量管理提供全新的视角。它…

将来会是Python、Java、Golang三足鼎立吗?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 软件工程里没有银弹&#xff…

leetcode刷题指南

本文我将分享给大家一套我自己使用良久并觉得非常高效的 学习论&#xff0c;它可以运用到 Leetcode 上的刷题&#xff0c;也可以 generalize 到生活中涉及到学习以及记忆的方方面面。当然&#xff0c;本文将以 Leetcode 刷题为 case study 去进行讲解。 更具体一点, 我会教大家…

2024年学浪视频如何导出到本地

在数字时代的浪潮中&#xff0c;知识的传递如同星辰般璀璨&#xff0c;而学浪视频则是那座连接天地的桥梁。2024年&#xff0c;我们站在科技的巅峰&#xff0c;眺望着知识的海洋&#xff0c;渴望将那些波光粼粼的智慧片段&#xff0c;一一捕捉&#xff0c;珍藏于心。想象一下&a…

day07beef-xss之根据beef-xss获取cookies

1.安装 apt-get update apt-get install beef-xss 若报错运行不了尝试 apt remove ruby apt remove beef-xss apt-get install ruby apt-get install ruby-dev libpcap-dev gem install eventmachine apt-get install beef-xss 2.运行 beef-xss 运行成功会自动弹出浏览框。 攻…

天猫最热销的三款随身WiFi,哪一款直播最好用?2024公认最好的随身WiFi,天猫上的随身wifi是正规产品吗

近期有小伙伴问我&#xff1a;“小编、小编我要当户外博主了&#xff0c;想买一个随身WiFi&#xff0c;但是天猫榜单前三的随身WiFi自己都没有听说过&#xff0c;到底入手哪个比较好&#xff1f;”三款随身WiFi呢&#xff0c;分别是格行随身WiFi、迅优随身WiFi、小米随身WiFi&a…

UEC++ FString做为参数取值时报错error:C4840

问题描述 用来取FString类型的变量时报错&#xff1a; 问题解决 点击错误位置&#xff0c;跳转到代码&#xff1a; void AMyDelegateActor::TwoParamDelegateFunc(int32 param1, FString param2) {UE_LOG(LogTemp, Warning, TEXT("Two Param1:%d Param2:%s"), param…

微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)

文章目录 背景实现步骤&#xff1a;1、我们先在utils目录中创建tab-service.js文件&#xff0c;写上全局的数据及方法&#xff1b;2、在app.json文件中配置导航信息3、根目录下创建custom-tab-bar目录4、编写custom-tab-bar组件4.1、custom-tab-bar/index.wxml4.2、custom-tab-…

政务网离线安装python3及其依赖手册

文章目录 python安装及环境配置gcc安装make安装python3安装pip安装 测试测试python3报错:ModuleNotFoundError: No module named _ctypes’测试pip3报错“pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.” 依赖库…

项目经理有哪些常见的沟通技巧?

项目经理有哪些常见的沟通技巧&#xff1f; 项目管理的核心之一是沟通。有效的沟通技巧对于确保项目团队成员之间的合作、项目信息的准确传达以及项目目标的顺利实现至关重要。一个号的项目管理工具可以让我们事半功倍&#xff0c;结合项目管理工具zz-plan 来探讨一些项目经理…

2024年第九届数维杯大学生数学建模挑战赛C 题解题思路1.0版本

题目分析&#xff1a; 问题背景&#xff1a;天然气水合物作为一种高效的清洁后备能源&#xff0c;其资源量评估对未来能源开发极为重要。 具体任务&#xff1a; 0.数据预处理 首先将txt中的数据合并到表格里方便后续操作&#xff0c;从Excel文件导入数据&#xff0c;清洗数…

【机器学习】逻辑回归:智能垃圾邮件分类实例

逻辑回归&#xff1a;智能垃圾邮件分类的利器 一、引言二、逻辑回归概述三、垃圾邮件分类实例数据准备特征选择与建模 四、总结与展望 一、引言 随着互联网的迅猛发展&#xff0c;电子邮件已成为人们日常生活和工作中不可或缺的一部分。然而&#xff0c;与此同时&#xff0c;垃…

综合能力 | 误差 | 学习笔记

误差指真值与观测值的差值。 误差分为系统误差&#xff08;消除方法&#xff1a;观测方法、仪器校正、修正等&#xff09;、偶然误差&#xff08;符合正态分布规律&#xff0c;进行计算纠正&#xff09;、粗差&#xff08;一般舍弃&#xff09;。 中误差&#xff08;均方差或标…

如何用 OceanBase做业务开发——【DBA从入门到实践】第六期

当应用一款新的数据库时&#xff0c;除了基础的安装部署步骤&#xff0c;掌握其应用开发方法才是实现数据库价值的关键。为此&#xff0c;我们特别安排了5月15日&#xff08;周三&#xff09;的《DBA 从入门到实践》第六期课程——本次课程将带大家了解OceanBase数据库的开发流…

探索静态住宅IP代理:保障网络安全与隐私的新途径

在数字化时代&#xff0c;互联网已经成为人们日常生活和工作的重要组成部分。然而&#xff0c;网络安全和隐私保护问题也随之而来&#xff0c;成为广大网民关注的焦点。静态住宅IP代理作为一种新兴的网络技术&#xff0c;以其独特的功能和优势&#xff0c;逐渐受到用户的青睐。…

IIS配置SSL,根据pem和key生成pfx,openssl的版本不能太高

1、生成pfx文件 供应商给的文件是pef和key后缀的两个文件&#xff0c;在IIS里不好导入(如果有知道好导入的可以给我留言&#xff0c;谢谢。)。 1.1 下载OpenSSL工具&#xff0c;并安装。 主要用于将.pem文件转成.pfx文件。 下载OpenSSL的链接&#xff1a;http://slproweb.com/…

【科学研究】秒懂C刊|微信不只是工具更重新定义了生活‼️ 摘 要:存在现象学的技术论,打破了现有新媒

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

【020】基于JavaWeb实现的批报管理系统

项目介绍 基于jspservlet实现的批报管理系统采用B/S架构,该项目设计了一个角色管理员&#xff0c;管理员实现了我的案件、查询统计、项目维护等三大功能模块 技术栈 开发工具&#xff1a;Idea2020.3 运行环境&#xff1a;jdk1.8tomcat9.0mysql5.7 服务端技术&#xff1a;j…

1.基于python的单细胞数据预处理-特征选择

文章目录 特征选择背景基于基因离散度基于基因归一化方差基于基因皮尔森近似残差特征选择总结 参考&#xff1a; [1] https://github.com/Starlitnightly/single_cell_tutorial [2] https://github.com/theislab/single-cell-best-practices 特征选择背景 现在已经获得了经过…

Python之数据分析基础

导言&#xff1a; “21世纪的竞争是数据的竞争&#xff0c;谁掌握数据&#xff0c;谁就掌握未来”。如何将大量看似杂乱无章的数据进行聚合&#xff0c;并发现潜在的规律也变得越来越重要。本文将先说明数据分析的步骤&#xff0c;再通过python完成实例数据的处理、分析最终展…