当前位置: 首页 > news >正文

C# 数据结构

目录

一、介绍

二、数组

三、List(列表)

四、Dictionary(字典)

五、Queue(队列)

六、Stack(栈)

七、Hashtable(哈希表)

结束


一、介绍

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

它们的逻辑结构通常有:

1.集合:数据结构中的元素之间除了“同属一个集合”的相互关系外,别无其他关系; 
2.线性结构:数据结构中的元素存在一对一的相互关系; 
3.树形结构:数据结构中的元素存在一对多的相互关系; 
4.图形结构:数据结构中的元素存在多对多的相互关系。

下面案例只介绍数据结构中常用的一些用法,因为具体的 API 实在太多了,详细的介绍页可以参考微软的官方文档:

C# 教程 - 概述 | Microsoft Learn

二、数组

可以将同一类型的多个变量存储在一个数组数据结构中。 通过指定数组的元素类型来声明数组。 如果希望数组存储任意类型的元素,可将其类型指定为 object。 

下面是编程语言中常用的数组,由于是一些基础的语法,有点编程基础的人几乎都懂,这里就不做过多的介绍。

int[] intArr = new int[3] { 2, 4, 5 };

这里介绍一下 ArrayList, ArrayList 在我们平时工作中用的非常少,我写 C# 很多年几乎就没用过,但还是可以了解了解

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Test4
{internal class Program{static void Main(string[] args){ArrayList arr = new ArrayList();//向数组中添加数据arr.Add(1);arr.Add(2);arr.Add(3);//读取数组中指定索引的值Console.WriteLine("arr[0]={0}", arr[0]);//获取数组的长度int count = arr.Count;//数组中是否包含指定的值bool b = arr.Contains(3);//向指定的下标插入值arr.Insert(0, 1);//移除指定的元素arr.Remove(1);//移除指定的下标对应的元素arr.RemoveAt(0);//清除数组arr.Clear();Console.ReadKey();}}
}

三、List(列表)

表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。

List 是一种强类型列表,List 在大多数情况下比ArrayList 执行的更好并且是类型安全的。使用泛型集合需要先引入命名空间 using System.Collections.Generic;

之前写过自定义List 的帖子,这篇帖子会写的更详细一些,有兴趣的可以去了解了解,

链接:点击跳转

常见的用法如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Test4
{internal class Program{static void Main(string[] args){List<string> list = new List<string>();//向列表中添加元素list.Add("a");list.Add("b");list.Add("c");//向列表中 给指定位置插入对应的值list.Insert(0, "e");//移除列表中指定的元素list.Remove("e");//移除指定的下标list.RemoveAt(0);//获取列表的长度int count = list.Count;//列表是否包含指定的元素bool b = list.Contains("a");//给列表指定的索引赋值list[1] = "f";//清空列表list.Clear();Console.ReadKey();}}
}

List 的遍历:

using System;
using System.Collections;
using System.Collections.Generic;namespace Test4
{internal class Program{static void Main(string[] args){List<int> list1 = new List<int>() { 2, 3, 56, 34, 64, 23 };//for循环遍历for (int i = 0; i < list1.Count; i++){Console.WriteLine(list1[i]);}//foreach遍历foreach (int i in list1){Console.WriteLine(i);}Console.ReadKey();}}
}

四、Dictionary(字典)

Dictionary 是存储键和值的集合。Dictionary 是无序的,键 Key 是唯一的

常见的用法如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Test4
{internal class Program{static void Main(string[] args){//创建一个字典对象,//Key 的类型是string,Value 的类型是intDictionary<string, int> dic = new Dictionary<string, int>();//Add 方法用来添加键值对dic.Add("老王",15);dic.Add("张三",34);//获取当前字典中存储的个数Console.WriteLine("字典的个数:{0}" + dic.Count);//检查字典中是否包含指定的 Keybool isContain = dic.ContainsKey("张三");//尝试获取对应的value,如果返回true,则代表获取value成功,否则则为获取失败int value = 0;bool b = dic.TryGetValue("老王", out value);//通过 key 获取 valueint age = dic["老王"];Console.WriteLine("老王的年龄是:" + age);//清除字典dic.Clear();Console.ReadKey();}}
}

字典的遍历

方式1:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Test4
{internal class Program{static void Main(string[] args){Dictionary<int, string> dict = new Dictionary<int, string>(){[10] = "A10",[20] = "A20",[30] = "A30",[40] = "A40",[50] = "A50"};foreach (var key in dict.Keys){Console.WriteLine($"key={key},value={dict[key]}");}Console.ReadKey();}}
}

方式2:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Test4
{internal class Program{static void Main(string[] args){Dictionary<int, string> dict = new Dictionary<int, string>(){[10] = "A10",[20] = "A20",[30] = "A30",[40] = "A40",[50] = "A50"};List<int> list = new List<int>(dict.Keys);for (int i = 0; i < dict.Count; i++){Console.WriteLine("key:{0},value:{1}", list[i], dict[list[i]]);}Console.ReadKey();}}
}

五、Queue(队列)

表示对象的先进先出集合。

常见的用法如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Test4
{internal class Program{static void Main(string[] args){Queue<string> queue = new Queue<string>();//向队列中添加元素queue.Enqueue("老一");queue.Enqueue("老二");queue.Enqueue("老三");//获取队列的数量int count = queue.Count;//队列中是否包含指定的 valuebool b = queue.Contains("老王");//获取队列中的元素//每次调用 Dequeue 方法,获取并移除队列中队首的元素string s1 = queue.Dequeue();Console.WriteLine(s1);string s2 = queue.Dequeue();Console.WriteLine(s2);string s3 = queue.Dequeue();Console.WriteLine(s3);//清空队列queue.Clear();Console.ReadKey();}}
}

六、Stack(栈)

表示对象的简单后进先出 (LIFO) 非泛型集合。

常见的用法如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Test4
{internal class Program{static void Main(string[] args){Stack<string> stack = new Stack<string>();//将元素入栈stack.Push("a");stack.Push("b");stack.Push("c");//栈的元素个数int count = stack.Count;//是否包含指定的元素bool b = stack.Contains("a");// Pop 把元素出栈,栈中就没有这个元素了string s1 = stack.Pop();Console.WriteLine(s1);string s2 = stack.Pop();Console.WriteLine(s2);string s3 = stack.Pop();Console.WriteLine(s3);Console.ReadKey();}}
}

七、Hashtable(哈希表)

表示根据键的哈希代码进行组织的键/值对的集合。

常见的用法如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Test4
{internal class Program{static void Main(string[] args){Hashtable ht = new Hashtable();//添加keyvalue键值对ht.Add("E", "e");ht.Add("A", "a");ht.Add("C", "c");ht.Add("B", "b"); //获取哈希 key 对应的 valuestring s = (string)ht["A"];Console.WriteLine(s);Console.WriteLine(ht["A"]);//判断哈希表是否包含指定的 keybool b = ht.Contains("E");//哈希表的个数int count = ht.Count;//移除一对键值对ht.Remove("C");//移除所有元素ht.Clear();Console.ReadKey();}}
}

哈希表的遍历

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Test4
{internal class Program{static void Main(string[] args){Hashtable ht = new Hashtable();//添加keyvalue键值对ht.Add("E", "e");ht.Add("A", "a");ht.Add("C", "c");ht.Add("B", "b");//遍历方法一:遍历哈希表中的键foreach (string key in ht.Keys){//Console.WriteLine(string.Format("{0}-{1}"), key, ht[key]);Console.WriteLine(string.Format("{0}-{1}", key, ht[key]));}//遍历方法二:遍历哈希表中的值foreach (string value in ht.Values){Console.WriteLine(value);}//遍历方法三:遍历哈希表中的键值foreach (DictionaryEntry de in ht){Console.WriteLine(string.Format("{0}-{1}", de.Key, de.Value));}Console.ReadKey();}}
}

结束

如果这个帖子对你有所帮助,欢迎 关注 + 点赞 + 留言

end

相关文章:

C# 数据结构

目录 一、介绍 二、数组 三、List&#xff08;列表&#xff09; 四、Dictionary&#xff08;字典&#xff09; 五、Queue&#xff08;队列&#xff09; 六、Stack&#xff08;栈&#xff09; 七、Hashtable&#xff08;哈希表&#xff09; 结束 一、介绍 数据结构是计…...

powerjob的worker启动,研究完了这块代码之后我发现了,代码就是现实中我们码农的真实写照

这是一篇让你受益匪浅的文章&#xff0c;代码即使人生。 worker启动比server启动要复杂一些&#xff0c;毕竟worker是要实际干活的&#xff0c;工欲善其事必先利其器&#xff0c;所以需要准备的工具还是不能少的&#xff0c;server对于powerjob来说&#xff0c;只是一个调度用的…...

配置Qt Creator

前言 为了使Qt Creator更像您最喜欢的代码编辑器或IDE&#xff0c;您可以更改键盘快捷键、配色方案、通用高亮显示、代码片段和版本控制系统的设置。 检查生成和运行设置 Qt Creator是一个集成开发环境(IDE)&#xff0c;可以用来开发Qt应用程序。虽然您可以使用Qt Installer…...

C++-类和对象(下)

C-类和对象&#xff08;下&#xff09;一&#xff0c;const成员函数二&#xff0c;再谈构造函数1&#xff0c;初始化列表2&#xff0c;explicit关键字三&#xff0c;static成员四&#xff0c;友元&#xff08;friend&#xff09;1&#xff0c;全局函数做友元2&#xff0c;类做友…...

什么是仓库管理?

仓库管理包括仓库日常运营所触及的准绳和流程。从较高的层次上讲&#xff0c;这包括接纳和组织仓库空间、布置劳动力、管理库存和完成订单。放大来看&#xff0c;你会发现有效的仓库管理触及到优化和集成这些过程中的每一个&#xff0c;以确保仓库操作的一切方面协同工作&#…...

对话系统学习概述(仅够参考)

对话系统&#xff08;仅够参考&#xff09; 目录对话系统&#xff08;仅够参考&#xff09;背景类人对话系统的关键特征1、知识运用2、个性体现3、情感识别与表达数据集评价方式评价的一些指标训练模型需要的资源任务型对话系统预训练最新研究进展参考文献背景 对话系统一般包括…...

免费CRM客户管理系统真的存在吗?不仅有,还有5个!

免费CRM客户管理系统真的存在吗&#xff1f;当然有&#xff01; 说到CRM客户管理系统&#xff0c;相信很多企业并不陌生&#xff0c;是因为CRM客户管理系统已经成为大多数企业最不可或缺的工具。但是对于很多小微企业和个人用户来说&#xff0c;购买和实施CRM的成本仍然难以承…...

C#开发的OpenRA使用自定义字典的比较函数

C#开发的OpenRA使用自定义字典的比较函数 字典是一个常用的数据结构, 因为它采用键值对的方式来保存数据, 这样非常方便程序里进行数据一对一的映射。 比如通过文件名称查找到文件对象,又者通过socket对象找到缓冲区对象。 由于字典是采用HASH算法,所以它的查找时间是非常快…...

DHCP协议

DHCP协议 文章目录DHCP协议DHCP作用及特点DHCP服务IP分配的三种方式DHCP协议中的报文类型DHCP服务工作流程抓包参考动态主机配置协议 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;&#xff0c;提供了一种 插网即用的技术。DHCP是一个应用层协议。当我们将…...

C语言进阶——自定义类型:枚举、联合

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日名言&#xff1a;如果不去遍历世界&#xff0c;我们就不知道什么是我们精神和情感的寄托&#xff0c;但我们一旦遍历了世界&#xff0c;却发现我们再也无法回到那美好的地方去了。当我们开始寻求&#xff0c;我们就已…...

背景透明(opacity vs background)

最近在做项目的时候&#xff0c;遇到透明度的相关设置。 常用的背景透明设置可分为两种&#xff0c;分别是&#xff1a; 一是给background设置透明度。二是利用opacity属性。 在跳了一些坑之后&#xff0c;本人更推荐给background设置透明度&#xff0c;为什么呢&#xff1f;…...

华为OD机试 - 最小施肥机能效(Python)| 真题+思路+考点+代码+岗位

最小施肥机能效 题目 某农场主管理了一大片果园,fields[i]表示不同果林的面积,单位:( m 2 m^2 m2),现在要为所有的果林施肥且必须在 n 天之内完成,否则影响收成。 小布是果林的工作人员,他每次选择一片果林进行施肥,且一片果林施肥完...

vue2 使用 cesium 篇

vue2 使用 cesium 篇 今天好好写一篇哈&#xff0c;之前写的半死不活的。首先说明&#xff1a;这篇博文是我边做边写的&#xff0c;小白也是&#xff0c;实现效果会同时发布截图&#xff0c;如果没有实现也会说明&#xff0c;仅仅作为技术积累&#xff0c;选择性分享&#xff0…...

2023预测:PKI将受到企业重点关注

2023年&#xff0c;PKI作为关键业务将继续被主流企业关注&#xff0c;根据Keyfactor发布的报告显示&#xff0c;很多企业正努力实施PKI&#xff0c;而以下因素是影响企业决策的主要原因&#xff1a;1、66% 的企业正在其IT环境中部署更多的密钥和证书&#xff0c;而70%的企业表示…...

linux基本功系列之grep命令

文章目录前言一. grep命令介绍二. 语法格式及常用选项三. 参考案例3.1 搜索文件中以root开头的文件3.2 搜索文件中出现的root3.3 搜索除了匹配行之外的行3.4 匹配的部分使用颜色显示3.5 只输出文件中匹配到的地方3.6 输出包含匹配字符串的行&#xff0c;并显示所在的行数3.7 统…...

硬件设计——DDR

一、DDR简介 &#xff08;1&#xff09;DDRDouble Data Rate双倍速率同步动态随机存储器。严格的说DDR应该叫DDR SDRAM&#xff0c;人们习惯称为DDR&#xff0c;其中&#xff0c;SDRAM 是Synchronous Dynamic Random Access Memory的缩写&#xff0c;即同步动态随机存取存储器。…...

最近你提前还贷了吗

最近你有想过提前还贷吗&#xff1f;以前&#xff0c;欠别人的是大爷&#xff0c;借别人钱的是孙子。现在好像反过来了呀&#xff0c;想还钱成了孙子。现在&#xff0c;各种银行以各种方式增加你提前还贷的难度。比如第一步&#xff0c;关闭app线上还款入口第二步&#xff0c;需…...

关于STM32常用的8种GPIO输入输出模式的理解

目录 GPIO共有8中输入输出模式&#xff0c;分别是&#xff1a;上拉输入、下拉输入、浮空输入、模拟输入、开漏输出、推挽输出、开漏复用输出、推挽复用输出 &#xff0c;下面我们详细介绍以下上面的八种输入输出模式。 一、输入模式 &#xff08;1&#xff09;上拉输入&#x…...

vue - vue项目中解决 IOS + H5 滑动边界橡皮筋弹性效果

问题: 最近遇到一个问题&#xff0c;我们在企业微信中的 H5 项目中需要用到table表格&#xff08;支持懒加载 上划加载数据&#xff09;。但是他们在锁头、锁列的情况下&#xff0c;依旧会出现边界橡皮筋效果。就会显示的很奇怪。 什么是ios橡皮筋效果&#xff1a; 我们知道元素…...

webpack(高级)--创建自己的loader 同步loader 异步loader loader参数校验

webpack 创建自己的loader loader是用于对模块的源代码进行转换&#xff08;处理&#xff09; 我们使用过很多loader 比如css-loader style-loader babel-loader 我么如果想要自己创建一个loader 首先创建webpack环境 pnpm add webpack webpack-cli -D 之后创建loader模块…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...