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

C#初级——List 容器

容器

在C#中,容器通常指的是用于存储和组织数据的集合类。

本文介绍的容器是动态数组List<T>  内部使用数组来存储元素,当添加元素超出当前数组容量时,会自动调整大小(扩容)。

list容器 

List<>是 C# 中的泛型集合容器,全称为 List<T>,其中 <T> 表示类型参数,允许你指定存储在列表中的元素的类型。List<T> 提供了丰富的方法和属性来操作集合中的元素,包括添加、删除和搜索等。

创建List列表

List<要存放的数据类型> List列表名 = new List<要存放的数据类型>();

List<int> listNum = new List<int>();

List基本操作

添加元素 Add()

            listNum.Add(1);listNum.Add(2);listNum.Add(3);listNum.Add(4);listNum.Add(5);listNum.Add(5);

通过 Add 方法,将内容存储到List中去。

获取容器大小 Count

            int count = listNum.Count; Console.WriteLine(count);    //6

访问元素 [索引]

容器名称[索引] 

            Console.WriteLine(listNum[1]);    //2

遍历元素 for和foreach

数组的两种遍历方式在List的遍历中同样适用。

            for (int i = 0; i < listNum.Count; i++){Console.WriteLine(listNum[i]);}foreach (int _num in listNum){Console.WriteLine(_num);}

 检查元素是否存在 Contains()

Contains()是一个布尔类型的方法,当相关内容存在时,返回true,不存在时,返回false。

            //包含if (listNum.Contains(1)){Console.WriteLine("包含1");}

拷贝元素 GetRange()

GetRange(i , j)是将一个List列表从第 i 位开始,拷贝 j 个元素到新的List列表上的方法。

下面展示将列表全拷贝到新的列表上面。

            List<int> listTemp = listNum.GetRange(0, listNum.Count);foreach (int _num in listTemp){Console.WriteLine(_num);}

索引查找元素 Index()

返回第一个找到的item索引,如果没有找到就返回-1。

            int Index1 = listNum.IndexOf(5);

移除元素

移除在x位上的元素 RemoveAt(x)

            listNum.RemoveAt(1);        //移除在第n位上的元素foreach (int _num in listNum){Console.WriteLine(_num);}

从第x个开始,移除y个 RemoveRange(x, y)

            listNum.RemoveRange(1, 2);  //从第几个开始,移除几个foreach (int _num in listNum){Console.WriteLine(_num);}

清除值为x的元素 Remove(x)

            listNum.Remove(4);for (int i = listNum.Count; i > 0; i--){if (listNum[i] == 5){listNum.RemoveAt(i);}}for (int i = 0; i < listNum.Count; i++){Console.WriteLine(listNum[i]);}

 清除所有的元素 Clear()

            listNum.Clear();            //清除所有的元素Console.WriteLine(listNum.Count);    //0

转变数组 ToArray()

            int[] arrNum = listNum.ToArray();   //转换为数组for (int i = 0; i < arrNum.Length; i++){Console.WriteLine(arrNum[i]);}

其他

Remove() 倒序循环问题

因为list是一个动态数组,并且会在Remove移除当前的元素之后改变数组大小,然后进行i++。这样就漏检查一个元素,万一这个元素也是想要移除的,就得再执行一次移除,这样很麻烦,所以,倒序循环就能规避这一点,元素一消除,索引发生改变,但是 i 之前的索引没有发生改变,所以,i 能完美的遍历所有的元素。

原本的正序循环也可以改进,将 i++ 放在else当中,当元素被移除时,i 不实现自加1操作就可以了。 

            listNum.Remove(4);for (int i = 0; i < listNum.Count;){if (listNum[i] == 5){listNum.RemoveAt(i);}else{i++;}}for (int i = listNum.Count; i > 0; i--){if (listNum[i] == 5){listNum.RemoveAt(i);}}

哈希值

哈希值通常指的是通过哈希函数对数据(如字符串或数字)进行处理后得到的一个固定长度的数值,这个数值通常用于快速比较和检索数据。

            int num = 5;int hashCode = num.GetHashCode();Console.WriteLine(hashCode);Console.WriteLine(listNum.GetHashCode());

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C/C++开发,opencv光流法跟踪特征点
  • 17085 工作分配问题(优先做)
  • C# 设计模式之抽象工厂模式
  • 定时器知识点
  • Go语言加Vue3零基础入门全栈班15 gin+gorm+vue3用户管理系统实战录播课 2024年08月04日 课程笔记
  • Python爬虫与MongoDB的完美结合
  • 《零散知识点 · 自定义 HandleMapping》
  • 鸿蒙媒体开发【相机数据采集保存】拍照和图片
  • 大模型术语表
  • 24年第五届“华数杯”数学建模竞赛浅析
  • 利用ffmpeg转码视频为gif图片,调整gif图片的大小
  • 全球氢燃料电池汽车市场规划预测:未来六年CAGR为44.4%
  • 前端-防抖代码
  • App推广新利器:Xinstall携带参数安装功能详解
  • FIR低通滤波器
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • Java 网络编程(2):UDP 的使用
  • Rancher如何对接Ceph-RBD块存储
  • React系列之 Redux 架构模式
  • Sass 快速入门教程
  • STAR法则
  • 初识MongoDB分片
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 工作手记之html2canvas使用概述
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 三分钟教你同步 Visual Studio Code 设置
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 第二十章:异步和文件I/O.(二十三)
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​人工智能书单(数学基础篇)
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • (java)关于Thread的挂起和恢复
  • (分享)自己整理的一些简单awk实用语句
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)Linux下编译安装log4cxx
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • ..回顾17,展望18
  • .NET : 在VS2008中计算代码度量值
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 无限分类
  • .net/c# memcached 获取所有缓存键(keys)
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .net中的Queue和Stack
  • @EventListener注解使用说明
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [AIGC] 解题神器:Python中常用的高级数据结构
  • [Android]How to use FFmpeg to decode Android f...
  • [Angular] 笔记 6:ngStyle