当前位置: 首页 > 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模块…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...