C# 数组与集合

C# 数组与集合

Array

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _16._1_Array
{internal class Program{static void Main(string[] args){int[] ints1 = { 1, 2, 3, 4, 5,6,7,8 };//将数组中指定位置的数据恢复为对应类型的默认值//参数1:需要恢复的数组 参数2:开始的位置的索引 参数3恢复的个数Array.Clear(ints1,1,3);MyWriteArr(ints1);int[] ints2 = new int[10];//将参数1数组中的数据复制到参数2数组汇总,由参数3指定复制的个数//注意:复制的个数不能超过源数组的长度, 2.复制的个数不能超过新数组的长度Array.Copy(ints1, ints2, 6);MyWriteArr(ints2);//反转数组Array.Reverse(ints1);MyWriteArr(ints1);//查找对应的数据在数组中第一次出现的位置,有则返回当前数据的索引值,如果没有则返回-1Console.WriteLine(Array.IndexOf(ints1,8));int[] ages = { 15, 12, 31, 18, 14, 19 };//根据传入的数据和方法,返回第一个满足条件的数据,如果数组中没有满足条件的数据,则返回该类型的默认值//工作原理:循环该数组,并且每次循环调用传递的方法,将当前的数据通过参数传递到方法中,如果方法返回了true,则Find直接返回这个参数Console.WriteLine(Array.Find(ages,FinSamll18));Console.WriteLine(Array.Find(ages,v=>v<18));//FindIndex() 返回满足查询条件的这个值的索引的位置Console.WriteLine(Array.FindIndex(ages, v => v < 18));//从后往前查询第一个满足条件的数据Console.WriteLine(Array.FindLast(ages, v => v < 18));Console.WriteLine(Array.FindLastIndex(ages, v => v < 18));//查询所有满足条件的数据 返回值是一个数组int [] arr = Array.FindAll(ages, v => v < 18);MyWriteArr(arr);//判断数组中的数据是否都满足条件//所有的数据都满足条件 则返回true 有一个不满足就返回falseConsole.WriteLine(Array.TrueForAll(ages, v => v < 18));//判断数据中至少有一个满足条件//有一个满足条件就返回true 所有不满足就返回falseConsole.WriteLine(Array.Exists(ages, v => v < 18));string[] str1 = { "老李", "老王", "老五" };string[] str2 = new string[5];//将str1复制到str2中 从str2的位置开始放str1.CopyTo(str2,1);//获取指定维度的数据的数量,返回值是32位的整数Console.WriteLine(str1.GetLength(0));//等同于  str1[0] ="老王";str1.SetValue("老王",0);Console.WriteLine(str1.GetValue(0));//判断书中是否存在某个数据Console.WriteLine(str1.Contains("老王"));}public static void MyWriteArr(int[] arr){string s = "[";for (int i = 0; i < arr.Length; i++){s += arr[i] + ",";}s += "]";Console.WriteLine(s);}public static bool FinSamll18(int value){//if (value<18)//{//    return true;//}//else//{//    return false;//}return value < 18;}}}

C#集合(Collection)

C# 中的集合类(Collection)是专门用于数据存储和检索的类,类中提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类都实现了相同的接口。

集合类的用途多种多样,例如可以动态的为元素分配内存、根据索引访问列表项等等,这些类创建 Object 类的对象集合,Object 类是 C# 中所有数据类型的基类。

C# 中的集合类型

在 System.Collections.Generic,System.Collections.Concurrent 和 System.Collections 命名空间下提供了许多集合类型,每种集合类型都有特定的用途,下面以 System.Collection 命名空间为例,该命名空间下提供的集合类型如下表所示:

描述和用法
动态数组(ArrayList)动态数组表示可被单独索引的对象的有序集合。 动态数组基本上与数组相似,唯一不同的是动态数组可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整自身的大小。 另外,动态数组也允许在列表中进行动态内存分配、增加、搜索、排序等等。
List类似ArrayList,只是List只能存储相同类型的数据,List的长度也不是固定的
字典(Dictionary)类似List.只能存储固定类型的数据,长度不固定
哈希表(Hashtable)哈希表可以使用键来访问集合中的元素。 哈希表中的每一项都由一个键/值对组成,键用于访问集合中的指定项。
排序列表(SortedList)排序列表是数组和哈希表的组合,可以使用键或索引来访问列表中的各项。 排序列表中包含一个可使用键或索引访问各项的列表,如果您使用索引访问各项,则它是一个动态数组,如果您使用键访问各项,则它就是一个哈希表。 另外,排序列表中的各项总是按键值进行排序的。
堆栈(Stack)堆栈代表了一个后进先出的对象集合。 当您需要对各项进行后进先出的访问时,则可以使用堆栈。为堆栈中添加一项称为推入项目,从堆栈中移除一项称为弹出项目。
队列(Queue)队列代表了一个先进先出的对象集合。 当您需要对各项进行先进先出的访问时,则可以使用队列。为队列中添加项目称为入队,为队列中移除项目称为出队。

C# ArrayList:动态数组

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _16._2_ArrayList
{internal class Program{static void Main(string[] args){//ArrayList 动态数组 就是不给固定长度和存储的数据的类型的集合//可以存储任意类型的数据,并且长度会随着数组内容的增加减少进行改变ArrayList list1 =new ArrayList() { "老王",1,true,new int[] {1} };Console.WriteLine(list1.Count);Console.WriteLine(list1[0]);//向ArrayList的尾部添加数据list1.Add("老李");int[] ints = { 666, 777, 888 };//将另一个集合的内容添加到ArrayList的尾部list1.AddRange(ints);//清空数组,删除动态数组所有的数据,并将Count重置为0list1.Clear();list1.Add("老李");//在指定的索引位置插入数据list1.Insert(1, "老王");//在指定的位置插入集合的内容list1.InsertRange(2, ints);Console.WriteLine(list1.Contains("老李"));//从数组中截取对应的数据,返回值是一个新的ArrayList//参数1:开始的索引 参数2:截取的个数list1.GetRange(1,3);Console.WriteLine(list1.IndexOf("老李"));list1.Remove("老李");list1.RemoveAt(1);list1.RemoveRange(1,2);for (int i = 0; i < list1.Count; i++){Console.WriteLine(list1[i]);}}}
}

C# List:泛型集合

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _16._3_List
{internal class Program{static void Main(string[] args){//List 也是一个集合 类似ArrayList 只是List只能存储相同类型的数据,List的长度也是不固定//格式: List<数据类型> 变量名=new List<数据类型>();List<int> list = new List<int>();Console.WriteLine(list[0]);Console.WriteLine(list.Count);list.Add(1);list.Remove();list.RemoveAt();list.Reverse();//.....}}
}

C# Dictionary 字典

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _16._4_Dictionary
{internal class Program{static void Main(string[] args){//Dictionary:类似List 只能存储固定类型的数据 长度不固定//list使用索引进行数据的操作,字典使用"键"进行数据的操作//键:标识 在一个字典中 键是唯一的 并且不能为null//  Dictionary<键的数据类型,值的数据类型> 变量名 = new Dictionary<键的数据类型,值的数据类型>();Dictionary<string,int> keyValuePairs = new Dictionary<string, int>(){{"name",32423 },{"k",1 },{"aa",1232 }};keyValuePairs.Add("a", 1);Console.WriteLine(keyValuePairs.Count);Console.WriteLine(keyValuePairs["k"]);keyValuePairs["k"] = 132;Console.WriteLine(keyValuePairs.ContainsKey("a"));Console.WriteLine(keyValuePairs.ContainsValue(1));}}
}

C# Hashtable:哈希表

在 C# 中,Hashtable(哈希表) 类表示根据键的哈希代码进行组织的键(key)/值(value)对的集合,可以使用键来访问集合中的元素。也就是说当您需要使用键来访问指定元素时,可以选择使用哈希表。

Hashtable 类中的属性

下表中列出了 Hashtable 类中一些常用的属性:

属性描述
Count获取哈希表中包含的键值对的个数
IsFixedSize获取一个值,用来表示哈希表是否具有固定大小
IsReadOnly获取一个值,用来表示哈希表是否只读
Item获取或设置与指定键关联的值
Keys获取一个 ICollection,其中包含哈希表中的键
Values获取一个 ICollection,其中包含哈希表中的值

Hashtable 类中的方法

下表中列出了 Hashtable 类中一些常用的方法:

方法名描述
public virtual void Add(object key, object value)向哈希表中添加一个带有指定的键和值的元素
public virtual void Clear()从哈希表中移除所有的元素
public virtual bool ContainsKey(object key)判断哈希表是否包含指定的键
public virtual bool ContainsValue(object value)判断哈希表是否包含指定的值
public virtual void Remove(object key)从哈希表中移除带有指定的键的元素

C# SortedList:排序列表

在 C# 中,SortedList 类用来表示键/值对的集合,这些键/值对按照键值进行排序,并且可以通过键或索引访问集合中的各个项。

我们可以将排序列表看作是数组和哈希表的组合,其中包含了可以使用键或索引访问各项的列表。如果您使用索引访问各项,那么它就是一个动态数组(ArrayList),如果您使用键访问各项,那么它就是一个哈希表(Hashtable)。另外,集合中的各项总是按键值进行排序。

SortedList 类的中的属性

下表列出了 SortedList 类中一些常用的属性:

属性描述
Capacity获取或设置排序列表中可包含的元素个数
Count获取排序列表中的元素个数
IsFixedSize判断排序列表是否具有固定大小
IsReadOnly判断排序列表是否只读
Item获取或设置排序列表中指定键所关联的值
Keys获取一个包含排序列表中所有键的集合
Values获取一个包含排序列表中所有值的集合

SortedList 类的中的方法

下表列出了 SortedList 类中一些常用的方法:

方法名描述
public virtual void Add(object key, object value)向排序列表中添加一个带有指定的键和值的元素
public virtual void Clear()从排序列表中移除所有的元素
public virtual bool ContainsKey(object key)判断排序列表中是否包含指定的键
public virtual bool ContainsValue(object value)判断排序列表中是否包含指定的值
public virtual object GetByIndex(int index)获取排序列表中指定索引处的值
public virtual object GetKey(int index)获取排序列表中指定索引处的键
public virtual IList GetKeyList()获取排序列表中的键
public virtual IList GetValueList()获取排序列表中的值
public virtual int IndexOfKey(object key)返回排序列表中指定键的索引,索引从零开始
public virtual int IndexOfValue(object value)返回排序列表中指定值第一次出现的索引,索引从零开始
public virtual void Remove(object key)从排序列表中移除带有指定键的元素
public virtual void RemoveAt(int index)移除排序列表中指定索引处的元素
public virtual void TrimToSize()将排序列表的容量设置为排序列表中元素的实际个数

C# Stack:堆栈

在 C# 中,堆栈(Stack)类表示一个后进先出的对象集合,当您需要对项目进行后进先出的访问时,则可以使用堆栈。向堆栈中添加元素称为推入元素,从堆栈中移除元素称为弹出元素。

Stack 类中的属性

下表列出了 Stack 类中一些常用的属性:

属性描述
Count获取堆栈中包含的元素个数
IsSynchronized判断是否同步对堆栈的访问(线程安全)
SyncRoot获取可用于同步对堆栈访问的对象

Stack 类中的方法

下表列出了 Stack 类中一些常用的方法:

方法名描述
public virtual void Clear()从堆栈中移除所有的元素
public virtual bool Contains(object obj)判断某个元素是否在堆栈中
public virtual object Peek()返回在堆栈顶部的对象,但不移除它
public virtual object Pop()移除并返回在堆栈顶部的对象
public virtual void Push(object obj)向堆栈顶部添加一个对象
public virtual object[] ToArray()复制堆栈到一个新的数组中

C# Queue:队列

在 C# 中,队列(Queue 类)与堆栈类似,它代表了一个先进先出的对象集合,当您需要对项目进行先进先出访问时,则可以使用队列。向队列中添加元素称为入队(enqueue),从堆栈中移除元素称为出队(deque)。

Queue 类中的属性

下表列出了 Queue 类的一些常用的属性:

属性描述
Count获取队列中包含的元素个数
IsSynchronized判断是否同步对队列的访问(线程安全)
SyncRoot获取可用于同步对队列访问的对象

Queue 类中的方法

下表列出了 Queue 类的一些常用的方法:

方法名描述
public virtual void Clear()从队列中移除所有的元素
public virtual bool Contains(object obj)判断某个元素是否在队列中
public virtual object Dequeue()移除并返回在队列开头的对象
public virtual void Enqueue(object obj)向队列的末尾处添加一个对象
public virtual object[] ToArray()复制队列到一个新的数组中
public virtual void TrimToSize()将队列的容量设置为队列中元素的实际个数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _16._6_Stack和Queue
{internal class Program{static void Main(string[] args){//声明一个堆栈Stack<string> stack = new Stack<string>();//添加一个数据stack.Push("a");//删除一个数据(只能删除最后的那个数据)stack.Pop();//获取堆栈中最上层的数据Console.WriteLine(stack.Peek());Console.WriteLine(stack.ToArray());stack.Clear();Queue<string> queue = new Queue<string>();//入队queue.Enqueue("a");Console.WriteLine(queue.Dequeue());}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GenAI助力DevOps,塑造软件工程的未来

自 2022 年以来&#xff0c;GenAI 无疑已成为一种普遍的技术趋势。在本文中&#xff0c;我们将探索 DevOps 中令人兴奋的 GenAI 领域&#xff0c;讨论其潜在优势、局限性、新兴趋势和最佳实践&#xff0c;深入了解 AI 支持的 DevOps 前沿世界&#xff0c;并探索这一强大组合如何…

ObjectFactory学习

简介 在Spring框架中&#xff0c;ObjectFactory是一个功能接口&#xff0c;它定义了一个简单的方法来获取对象的实例。ObjectFactory接口通常用于工厂模式和依赖注入中&#xff0c;允许延迟对象创建和配置&#xff0c;以及在运行时动态地决定要返回的对象实例。 源码 Functi…

Laravel Octane 和 Swoole 协程的使用分析二

又仔细研究了下 Octane 源码和 Swoole 的文档&#xff0c;关于前几天 Laravel Octane 和 Swoole 协程的使用分析中的猜想&#xff0c;得到进一步验证&#xff1a; Swoole 的 HTTP Server 启动后会创建一个 master 进程和一个 manager 进程&#xff1b;master 进程又会创建多个…

智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛)

智能咖啡厅助手&#xff1a;人形机器人 融合大模型&#xff0c;行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛) “机器人大模型与具身智能挑战赛”的参赛作品。的目标是结合前沿的大模型技术和具身智能技术&#xff0c;开发能在模拟的咖啡厅场景中承担服务员角色并…

常用备注(记录中...)

文章目录 docker测试网络可达性检查端口是否开放PgSql docker docker logout IP地址:端口号 docker login IP地址:端口号桥接模式bridge启动容器 docker run -d -p 外部端口号:内部端口号(配置文件中的端口号) --name 容器名称 -v /data/docker/conf/application.yml:/app/con…

javaWebssh在线授课辅导系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh在线授课辅导系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

4.Java---方法+重载

方法 方法的调用是需要开辟内存的,方法调用结束内存就被销毁了. 下面将介绍一个经典的错误标准的0分的示意! 我们日常中写交换两个数字的代码的时候都会用如下的方法进行描述: 你是不是觉得自己写的特别对!终于可以独立写一个小小的函数了? 下面运行一下看看结果 哦莫!怎么…

autoware.universe中所有的多传感器融合代码解读,一看就懂!

目录 融合的前提条件case1:vision_roi与cluster融合融合过程case2:vision_roi与centerPoint融合融合过程小结:case3:vision_roi与pointcloud融合融合过程总结融合的前提条件 计算视觉ROI话题的时刻T1(时间戳获得) 计算激光雷达话题的时刻T2,并将T2加上设定的偏差时间间隔in…

C# DataTable 对象操作

实现DataTable按字段进行分类、按列数据汇总、序列化对象数组、所有字段转小写、动态对象数组、数据分页 分类DataTableClassfiy实体&#xff1a; /// <summary>/// 单个分类表/// </summary>public class DataTableClassfiy{/// <summary>/// 分类名称/// &…

springboot第61集:Jenkins-Boss万字挑战,一文让你走出微服务迷雾架构周刊

名词 CONTAINER ID&#xff08;容器ID&#xff09; 名词 IMAGE ID&#xff08;镜像ID&#xff09;cat /etc/os-release //查看系统信息 pwd //查看当前路径 ls //查看当前目录文件 docker -v //查看docker版本 docker-compose up -d //在后台运行&#xff08;取消-d是在控制台运…

linux系统Jenkins工具添加自由项目和maven项目

Jenkins添加自由项目 添加自由项目操作流程代码远程代码邮件标题邮件正文 添加maven项目准备环境操作流程 添加自由项目 gitlab配置基本代码页面等&#xff0c;拉取代码&#xff0c;打包&#xff0c;发布操作流程 代码 远程代码 echo ssh root192.168.188.177 "tar cz…

EasyExcel 自适应列宽、隐藏列、动态列、单元格下拉框选择数据、单元格文本格式

前言 项目中用到EasyExcel读写Excel&#xff0c;用到了一下功能&#xff0c;这里做个笔记&#xff1a; 列宽自适应&#xff1a;自适应宽度隐藏列&#xff1a;隐藏某些列动态列&#xff1a;固定列 动态的生成Excel列单元格下拉框选择数据&#xff1a;设计单元格下拉数据&…

深搜,LeetCode 2368. 受限条件下可到达节点的数目

一、题目 1、题目描述 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数…

WPF的DataGrid设置标题头

要设置DataGrid标题头的分割线、背景色和前景色等属性&#xff0c;您可以使用DataGrid的样式和模板来自定义标题头的外观。下面是详细解释以及示例代码&#xff1a; 分割线设置&#xff1a; 您可以使用DataGrid.ColumnHeaderStyle样式中的BorderThickness和BorderBrush属性来设…

Java基础-java开发入门

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、什么是Java 二、Java语言的特点 三、什么是JDK 四、第一个Java程序 一、什么是Java Java是由Sun …

electron nsis 安装包 window下任务栏无法正常固定与取消固定

问题 win10系统下&#xff0c;程序任务栏在固定后取消固定&#xff0c;展示的程序内容异常。 排查 1.通过论坛查询&#xff0c;应该是与app的api setAppUserModelId 相关 https://github.com/electron/electron/issues/3303 2.electron-builder脚本 electron-builder…

二月打戏最燃的国漫推荐,斗罗大陆2上榜,吞噬星空堪称第一

2024年开年&#xff0c;国漫就给我们带来了很大的惊喜&#xff0c;在刚刚过去的2月&#xff0c;有几部中出现了超燃的打戏&#xff0c;看得人热血沸腾。尤其是科幻番《吞噬星空》中的一场1V1对决&#xff0c;特效和设计都堪称第一。还有哪些国漫上榜呢&#xff1f;下面就一起来…

TCP为什么要三次握手?

TCP三次握手协议是为了在不可靠的互联网环境中可靠地建立起一个连接&#xff0c;三次握手可以确保两端的发送和接收能力都是正常的。 那么&#xff0c;为什么是三次而不是二次或四次握手呢&#xff1f; 为什么不是二次握手&#xff1f; 如果是二次握手&#xff0c;即客户端发…

网络编程 io_uring

io_uring 1、概述 io_uring是Linux&#xff08;内核版本在5.1以后&#xff09;在2019年加入到内核中的一种新型的异步I/O模型&#xff1b; io_uring使用共享内存&#xff0c;解决高IOPS场景中的用户态和内核态的切换过程&#xff0c;减少系统调用&#xff1b;用户可以直接向…

vue + cesium初始化地图 + 鼠标经过地图(点、线等其他实体)样式

vue cesium初始化地图 鼠标经过地图&#xff08;点、线等其他实体&#xff09;样式 export function initMap(mapViewer) {Cesium.Ion.defaultAccessToken "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0OTUzOGJhMy1iNzVjLTQwZjItYWYyNy03YjA4MjM0YWE2MWMiLCJpZ…