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

C# 集合(Collection)

文章目录

  • 前言
  • 一、动态数组(ArrayList)
  • 二、哈希表(Hashtable)
  • 三、排序列表(SortedList)
  • 四、堆栈(Stack)
  • 五、队列(Queue)
  • 六、点阵列(BitArray)


前言

  在 C# 编程领域,集合(Collection)类是不可或缺的重要组成部分,专为数据存储、检索与操作精心构建。它们提供了对栈、队列、列表及哈希表等经典数据结构的有力支持,多数集合类遵循相同接口规范,这既保障了使用方式的连贯性,又利于代码在不同集合类型间灵活切换与复用。集合类基于 Object 类(C# 所有数据类型的根基)构建对象集合,能容纳多样数据类型,还可按需动态调配内存、依索引便捷访问元素,以契合复杂多变的编程诉求。
在这里插入图片描述

一、动态数组(ArrayList)

  ArrayList 呈现为可单独索引的有序对象集,类似数组却更具弹性,能在运行时自动调整容量。与静态数组需预先定义固定大小不同,它允许在指定索引处自由增删元素,内部会高效重分配内存。常用于处理元素数量不定的数据场景,像动态收集用户输入、存储临时计算结果等。

示例代码

using System;
using System.Collections;class Program
{static void Main(){ArrayList arrayList = new ArrayList();// 添加元素arrayList.Add(10);arrayList.Add("Hello");arrayList.Add(true);// 基于索引访问与修改元素int valueAtIndex1 = (int)arrayList[1];arrayList[2] = false;// 遍历 ArrayListforeach (var item in arrayList){Console.WriteLine(item);}// 移除元素arrayList.Remove("Hello");Console.WriteLine("After removal:");foreach (var item in arrayList){Console.WriteLine(item);}}
}

  上述代码先创建 ArrayList 实例,依次添加整型、字符串、布尔型数据,展示其异构存储能力;再按索引读取、修改元素;随后遍历输出所有元素,最后移除指定字符串元素并再次遍历展示动态调整效果,输出依次为 “10”“Hello”“True” 及 “10”“False”。

二、哈希表(Hashtable)

  Hashtable 借助键值对(Key/Value Pair)存储与检索数据,凭借哈希算法实现快速定位,键作为访问入口,对应唯一值。适用于需依据特定标识迅速查找对应内容的场景,如依据学号查学生档案、依商品条码取商品详情,在大数据量下优势尤为凸显。

示例代码

using System;
using System.Collections;class Program
{static void Main(){Hashtable hashtable = new Hashtable();// 添加键值对hashtable.Add("Apple", 5);hashtable.Add("Banana", 8);hasht月table.Add("Cherry", 3);// 通过键获取值int appleQuantity = (int)hashtable["Apple"];Console.WriteLine($"Apple quantity: {appleQuantity}");// 遍历 Hashtableforeach (DictionaryEntry entry in hashtable){Console.WriteLine($"{entry.Key}: {entry.Value}");}// 判断键是否存在并更新值if (hashtable.ContainsKey("Banana")){hashtable["Banana"] = 10;}Console.WriteLine("After update:");foreach (DictionaryEntry entry in hashtable){Console.WriteLine($"{entry.Key}: {entry.Value}");}}
}

  此代码构建 Hashtable 存储水果及数量,先添加三组键值对,依键 “Apple” 精准取值展示查找便捷性;再遍历输出所有键值信息;确认 “Banana” 键存在后更新对应值并二次遍历呈现更新成果,输出含各水果初始及更新后数量等信息。

三、排序列表(SortedList)

  SortedList 融合数组与哈希表之长,可借索引(如同数组)或键(类似哈希表)访问元素,且内部按键值自动排序,维持有序状态。在兼顾顺序性与快速查找需求场景下表现出色,如管理按姓氏笔画排序且可依姓名或序号检索的人员名单。

示例代码

using System;
using System.Collections;class Program
{static void Main(){SortedList sortedList = new SortedList();// 添加键值对sortedList.Add("Zhang", 25);sortedList.Add("Li", 30);sortedList.Add("Wang", 28);// 通过索引访问int valueAtIndex1 = (int)sortedList[1];Console.WriteLine($"Value at index 1: {valueAtIndex1}");// 通过键访问int wangAge = (int)sortedList["Wang"];Console.WriteLine($"Wang's age: {wangAge}");// 遍历 SortedListforeach (DictionaryEntry entry in sortedList){Console.WriteLine($"{entry.Key}: {entry.Value}");}}
}

  代码创建 SortedList 存人员姓名及年龄,添加数据后,既按索引获取第二元素对应年龄展示数组特性,又依 “Wang” 键查年龄凸显哈希表功能;最终遍历输出有序键值对,展示排序与双访问模式结合优势。

四、堆栈(Stack)

  Stack 遵循后进先出(LIFO)原则,新元素 “推入(Push)” 栈顶,移除时 “弹出(Pop)” 栈顶元素,常用于处理需逆序回溯或操作顺序敏感事务,像解析嵌套括号表达式、实现撤销重做功能,保障操作按正确逆序执行。

示例代码

using System;
using System.Collections;class Program
{static void Main(){Stack stack = new Stack();// 推入元素stack.Push(1);stack.Push(2);stack.Push(3);// 弹出元素并输出int poppedValue = (int)stack.Pop();Console.WriteLine($"Popped value: {poppedValue}");// 遍历 Stack(需转换为数组辅助)object[] stackArray = stack.ToArray();for (int i = stackArray.Length - 1; i >= 0; i--){Console.WriteLine(stackArray[i]);}}
}

  此例先向 Stack 依次推入 1、2、3 三个元素,弹出栈顶 “3” 并输出;后将 Stack 转数组逆序遍历,展示 LIFO 特性,输出先是 “3”,再依次为 “2”“1”。

五、队列(Queue)

  Queue 依先进先出(FIFO)规则运作,元素 “入队(Enqueue)” 队尾,“出队(Dequeue)” 于队首,精准模拟现实排队场景,广泛用于任务调度、消息传递等需按先来后到处理事务之处,如计算机多任务排队等待 CPU 执行。

示例代码

using System;
using System.Collections;class Program
{static void Main(){Queue queue = new Queue();// 入队元素queue.Enqueue("Task 1");queue.Enqueue("Task 2");queue.Enqueue("Task 3");// 出队元素并输出string dequeuedTask = (string)queue.Dequeue();Console.WriteLine($"Dequeued task: {dequeuedTask}");// 遍历 Queue(需转换为数组辅助)object[] queueArray = queue.ToArray();foreach (var item in queueArray){Console.WriteLine(item);}}
}

  代码构建 Queue 模拟任务队列,“Task 1”“Task 2”“Task 3” 依次入队,出队首 “Task 1” 并输出;转数组遍历展示剩余任务,输出依次是 “Task 1”“Task 2”“Task 3”(出队后剩 “Task 2”“Task 3” 及遍历展示顺序)。

六、点阵列(BitArray)

  BitArray 是二进制数组,用 0 和 1 存数据,适合处理位级信息,尤其在事先不知所需存储位数时大显身手,常见于网络通信、图像数据处理、底层系统状态标识等,以紧凑方式管理二进制数据。

示例代码

using System;
using System.Collections;class Program
{static void Main(){BitArray bitArray = new BitArray(5);// 设置位值bitArray[0] = true;bitArray[2] = true;// 检查位值bool bitValueAt1 = bitArray[1];Console.WriteLine($"Bit value at index 1: {bitValueAt1}");// 遍历 BitArrayfor (int i = 0; i < bitArray.Length; i++){Console.WriteLine($"Bit value at index {i}: {bitArray[i]}");}}
}

  本示例创建长度为 5 的 BitArray,设置第 1、3 位(索引 0、2)为 “true”(即值 1),检查索引 1 位值并遍历输出各点位值,展示二进制位存储、访问与遍历操作,输出含各点位设置及初始值情况。
在这里插入图片描述

相关文章:

C# 集合(Collection)

文章目录 前言一、动态数组&#xff08;ArrayList&#xff09;二、哈希表&#xff08;Hashtable&#xff09;三、排序列表&#xff08;SortedList&#xff09;四、堆栈&#xff08;Stack&#xff09;五、队列&#xff08;Queue&#xff09;六、点阵列&#xff08;BitArray&…...

【智能控制】实验,基于MATLAB的模糊推理系统设计,模糊控制系统设计

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...

前端跳转路由的时候,清掉缓存

清除路由缓存的方法 ‌使用 $router.push() 方法‌&#xff1a;在跳转路由时&#xff0c;可以通过传递一个包含 replace: true 属性的对象来实现清除路由缓存。例如&#xff1a; this.$router.push({ path: "/new-route", replace: true }); ‌使用 $router.replace…...

基于 LlamaFactory 的 LoRA 微调模型支持 vllm 批量推理的实现

背景 LlamaFactory 的 LoRA 微调功能非常便捷&#xff0c;微调后的模型&#xff0c;没有直接支持 vllm 推理&#xff0c;故导致推理速度不够快。 LlamaFactory 目前支持通过 VLLM API 进行部署&#xff0c;调用 API 时的响应速度&#xff0c;仍然没有vllm批量推理的速度快。 …...

【赵渝强老师】PostgreSQL的物理存储结构

PostgreSQL在执行initdb的数据库集群初始化时会指定一个目录。该目录通过环境变量$PGDATA来表示。当数据库集群初始化完成后&#xff0c;会在这个目录生成相关的子目录以及一些文件。这些生成的文件就是PostgreSQL的物理存储结构中的文件。如下图所示。 如上图所示&#xff0c…...

智能探针技术:实现可视、可知、可诊的主动网络运维策略

网络维护的重要性 网络运维是确保网络系统稳定、高效、安全运行的关键活动。在当今这个高度依赖信息技术的时代&#xff0c;网络运维的重要性不仅体现在技术层面&#xff0c;更关乎到企业运营的方方面面。网络运维具有保障网络的稳定性、提升网络运维性能、降低企业运营成本等…...

CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(不会)

通过网盘分享的文件&#xff1a;如果能重来.zip 链接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取码: 1111 --来自百度网盘超级会员v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…...

debian 11 虚拟机环境搭建过坑记录

目录 安装过程系统配置修改 sudoers 文件网络配置换源安装桌面mount nfs 挂载安装复制功能tab 无法补全其他安装 软件配置eclipse 配置git 配置老虚拟机硬盘挂载 参考 原来去 debian 官网下载了一个最新的 debian 12&#xff0c;安装后出现包依赖问题&#xff0c;搞了半天&…...

MYSQL 什么是内连接 外连接 左连接 右连接?及适用场景

在 SQL 中&#xff0c;连接&#xff08;JOIN&#xff09;是用于组合来自两个或更多表的行的一种方法。根据连接的方式不同&#xff0c;可以分为几种类型的连接&#xff1a;内连接&#xff08;INNER JOIN&#xff09;、外连接&#xff08;OUTER JOIN&#xff09;、左连接&#x…...

利用Ubuntu批量下载modis图像(New)

由于最近modis原来批量下载的代码不再直接给出&#xff0c;因此&#xff0c;再次梳理如何利用Ubuntu下载modis数据。 之前的下载代码为十分长&#xff0c;现在只给出一部分&#xff0c;需要自己再补充另一部分。之前的为&#xff1a; 感谢郭师兄的指导&#xff08;https://blo…...

【Springboot】@Autowired和@Resource的区别

【Springboot】Autowired和Resource的区别 【一】定义【1】Autowired【2】Resource 【二】区别【1】包含的属性不同【2】Autowired默认按byType自动装配&#xff0c;而Resource默认byName自动装配【3】注解应用的地方不同【4】出处不同【5】装配顺序不用&#xff08;1&#xff…...

UIE与ERNIE-Layout:智能视频问答任务初探

内容来自百度飞桨ai社区UIE与ERNIE-Layout&#xff1a;智能视频问答任务初探&#xff1a; 如有侵权&#xff0c;请联系删除 1 环境准备 In [2] # 安装依赖库 !pip install paddlenlp --upgrade !pip install paddleocr --upgrade !pip install paddlespeech --upgrade In …...

数据结构:树

树的基本定义&#xff1a; 树是一种数据结构&#xff0c;它是由n&#xff08;n>1&#xff09;个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; …...

docker 怎么启动nginx

在Docker中启动Nginx容器是一个简单的过程。以下是启动Nginx容器的步骤&#xff1a; 拉取Nginx镜像&#xff1a; 首先&#xff0c;你需要从Docker Hub拉取Nginx的官方镜像。使用以下命令&#xff1a; docker pull nginx运行Nginx容器&#xff1a; 使用docker run命令来启动一个…...

【智商检测——DP】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510, M 110; int f[N][M]; int main() {int n, k;cin >> n >> k;for(int i 1; i < n; i){int x;cin >> x;f[i][0] __gcd(f[i-1][0], x);for(int j 1; j < min(i, k)…...

YOLOv11改进,YOLOv11添加SAConv可切换空洞卷积,二次创新C3k2结构

摘要 作者提出的技术结合了递归特征金字塔和可切换空洞卷积,通过强化多尺度特征学习和自适应的空洞卷积,显著提升了目标检测的效果。 理论介绍 空洞卷积(Atrous Convolution)是一种可以在卷积操作中插入“空洞”来扩大感受野的技术,更有效地捕捉到图像中的大范围上下文…...

使用R语言优雅的获取任意区域的POI,道路,河流等数据

POI是“Polnt of Information”的缩写&#xff0c;中文可以翻译为“信息点”。是地图上任何非地理意义的有意义的点&#xff0c;如商店&#xff0c;酒吧&#xff0c;加油站&#xff0c;医院&#xff0c;车站等。POI&#xff0c;道路网&#xff0c;河流等是我们日常研究中经常需…...

【设计模式】工厂方法模式 在java中的应用

文章目录 1. 引言工厂方法模式的定义 2. 工厂方法模式的核心概念工厂方法模式的目的和原理与其他创建型模式的比较&#xff08;如简单工厂和抽象工厂&#xff09; 3. Java中工厂方法模式的实现基本的工厂方法模式结构示例代码&#xff1a;创建不同类型的日志记录器 4. 工厂方法…...

Pytest框架学习20--conftest.py

conftest.py作用 正常情况下&#xff0c;如果多个py文件之间需要共享数据&#xff0c;如一个变量&#xff0c;或者调用一个方法 需要先在一个新文件中编写函数等&#xff0c;然后在使用的文件中导入&#xff0c;然后使用 pytest中定义个conftest.py来实现数据&#xff0c;参…...

【面试开放题】挫折、问题、擅长、应用技能

1. 项目中遇到的最大挫折是什么&#xff1f;你是如何应对的&#xff1f; 解答思路&#xff1a; 这个问题通常考察你的问题解决能力、抗压能力和团队协作精神。回答时&#xff0c;可以从以下几个角度展开&#xff1a; 问题背景&#xff1a; 描述项目中遇到的具体挑战。是技术难…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

如何把工业通信协议转换成http websocket

1.现状 工业通信协议多数工作在边缘设备上&#xff0c;比如&#xff1a;PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发&#xff0c;当设备上用的是modbus从站时&#xff0c;采集设备数据需要开发modbus主站&#xff1b;当设备上用的是西门子PN协议时&#xf…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...