【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#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创新案例|搜索新王Perplexity如何构建生成式AI产品开发的新模式

Perplexity AI&#xff1a;生成式搜索的颠覆者 刚刚成立满两年&#xff0c;Perplexity AI已经变成了我日常频繁使用的工具&#xff0c;甚至取代了我对 Google搜索的依赖 —— 而我并非个案。该公司仅凭不到 50 名员工&#xff0c;已经吸引了数千万用户。他们目前的年收入超过 …

Linux中的httpd服务简单应用,配置网页版显示

1.启动服务 2.开放端口或者关闭防火墙 3.删除欢迎网页 4.创建自己的目录和文件 5.登录查看

[已解决]ModuleNotFoundError: No module named ‘tqdm‘

&#x1f60e; 作者介绍&#xff1a;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff0c;视频号&#xff1a;AI-行者Sun &#x1f388; 本文专栏&#xff1a;本文收录于《AI实战中的各种bug…

Vuex核心概念-state状态

目录 一、目标 二、提供数据 三、使用数据 1.通过store直接访问 2.通过辅助函数&#xff08;简化&#xff09; 一、目标 明确如何给仓库提供数据&#xff0c;如何使用仓库的数据 二、提供数据 State提供唯一的公共数据源&#xff0c;所有共享的数据都要统一放到Store中的…

superset与metabase调研比较

BI工具是什么&#xff1f; 百度百科是这么解释的&#xff1a; 商业智能&#xff08;Business Intelligence&#xff0c;简称&#xff1a;BI&#xff09;&#xff0c;又称商业智慧或商务智能&#xff0c;指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数…

信创 | 信创引领:打造高品质居民生活新篇章

信创产业的发展对于打造高品质居民生活具有重要意义。首先&#xff0c;信创产业的迅速发展能够提高人们的生活品质&#xff0c;推动社会朝着信息化、数字化方向进步。这一点在多个方面得到了体现&#xff0c;例如&#xff0c;通过自主可控的信创产业链的初步形成&#xff0c;居…

React - sass配置

1. idea下载Easy Sass插件&#xff1a; 2. 启用后&#xff0c;我们写的scss文件不能直引用&#xff0c;所以还要下载sass依赖&#xff1a; (推荐使用.scss&#xff0c;因为与原生.css写法接近&#xff0c;.sass格式更严格) // 下载sass依赖 npm install sass sass-loader --s…

电商购物系统商品数据结构设置

电商购物系统商品数据结构设置 如上图所示 , 该表为商品表关系的示意图 , 气质我们要溥仪一个电视购物系统要用到的知识那就是SPU和SKU 简单来说这两种就是不同的分类方式 , 我们在浏览淘宝等页面的时候也会遇见相同的情况如我们可以进行品牌的筛选 , 也可以进行商品价格的筛选…

idea-自我常见配置

1. 主题配置 2. 显示方法分隔符 Editor->General->Appearance 3. 忽略大小写提示 Editor->General->Code Completion 4. 自动导包 Editor->general->Auto Import 5. 取消单行显示Tabs Editor->General->Editor Tabs 效果如下图&#xff1a; 6. 设置…

IPEX 内针——KH-IPEX-K501-29

kinghelm(金航标) 品  牌&#xff1a; kinghelm(金航标) 厂家型号&#xff1a; KH-IPEX-K501-29 封装&#xff1a; SMD 商品毛重&#xff1a; 0.093克(g) 包装方式&#xff1a; 编带

安捷伦Agilent8722ES,8722ET 矢量网络分析仪

Agilent 8722ET、Keysight 8722ET、HP 8722ET 网络分析仪&#xff0c;50 MHz - 40 GHz 产品型号&#xff1a;8722et 产品名称&#xff1a;网络分析仪 产品品牌&#xff1a;安捷伦agilent 产品指标&#xff1a; 50mhz-40ghz 达 104 db 的动态范围 2个测量通道 4个显示通道 …

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第19课-活动报名表单

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第19课-活动报名表单 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎…

Jenkins android 自动打包安卓 centos8.5 运维系列五

1 新建项目android #cat android.sh #!/bin/bash rm -rf /data/.jenkins/workspace/android/app/build/outputs/apk/debug/* rm -rf /data/.jenkins/workspace/android/app/build/outputs/apk/release/* cd /data/.jenkins/workspace/android/app source /etc/profile g…

【QA】Java集合常用的函数

文章目录 前言Collection接口通用函数 | Collections工具类通用函数 | List接口 Set接口List接口ArrayListLinkedList Set接口TreeSetHashSetLinkedHashSet Map接口通用函数TreeMapHashMapLinkedHashMap 前言 本文介绍Java集合中常用的函数。 Collection接口 通用函数 | Co…

数据结构(十三)----几种特殊的树

目录 一.二叉排序树 1.二叉排序树的查找 2.二叉排序树的插入 3.二叉排序树的构造 4.二叉树的删除 5.二叉排序树的查找效率 二.平衡二叉树 1.平衡二叉树的插入 2.平衡二叉树的查找效率 3.平衡二叉树的删除 三.红黑树 1.红黑树的概念 2.红黑树的查找 3.红黑树的插入…

QT_day1

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//修改窗口标题this->setWindowTitle("4.6.0");//修改窗口图标this->setWindowIcon(QIcon("C:\\Users\\zj\\Desktop\\yuanshen\\icon"));//修改窗口大小this…

【VMware】vSphere 8.0 安装和设置简介

本信息的目标读者为熟悉虚拟机技术和数据中心操作并具有丰富经验的 Windows 或 Linux 系统管理员。 vSphere 8.0 提供了各种安装和设置选项&#xff0c;这些选项定义了相应的任务序列。 vSphere 的两个核心组件是 ESXi 和 vCenter Server。ESXi 是可用于创建和运行虚拟机和虚拟…

AI地名故事:庙头村

庙头村的名字来源于隋朝时期。当时&#xff0c;村前建有一座南海神庙&#xff0c;这也是我们村名的由来&#xff0c;并一直沿用至今。这座南海神庙不仅是历朝历代朝廷政府举办出海海祭&#xff08;国家仪式&#xff09;的地方&#xff0c;更是广州海上丝绸之路的起点。这里保存…

Github 2024-05-07 开源项目日报 Tp10

根据Github Trendings的统计,今日(2024-05-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目4Jupyter Notebook项目2Python项目1Batchfile项目1非开发语言项目1Java项目1HTML项目1C#项目1从零开始构建你喜爱的技术 创建周期…

数据中心运维智能化管理 效果多炸裂?

从人工走向智能&#xff0c;一切的变化来源于数据中心规模化、系统复杂性和设备多样性的挑战&#xff0c;将平台运维的重要性推到了高点。 #01 为何要智能化&#xff1f; — 企业IT建设不断深入和完善&#xff0c;业务对系统稳定性和连续性的依赖&#xff0c;智能化将是更好…