C#初级——List 容器

embedded/2024/9/23 14:55:15/

容器

在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());

http://www.ppmy.cn/embedded/90795.html

相关文章

C++商店管理系统

代码中使用了C11的特性 后面有些输出(cout输出的)的提示文本是英文&#xff0c;因为懒得敲中文 源码在最后面 文末投票参与一下谢谢 商品数据保存在 items.txt 用户数据保存在 users.txt 实现功能 1.添加商品&#xff08;商品ID,商品名&#xff0c;库存数量&#xff0c;价格&a…

图解RocketMQ之消息如何存储

大家好&#xff0c;我是苍何。 人一辈子最值得炫耀的不应该是你的财富有多少&#xff08;虽然这话说得有点违心&#xff0c;呵呵&#xff09;&#xff0c;而是你的学习能力。技术更新迭代的速度非常快&#xff0c;那作为程序员&#xff0c;我们就应该拥有一颗拥抱变化的心&…

git创建远程仓库

注册 请自行注册github账号 创建远程仓库 自己在上图那里可以创建一个远程仓库 克隆远程仓库 我们需要将远程仓库克隆到本地之后&#xff0c;在本地修改最后上传到远程仓库&#xff0c;关系如下&#xff1a; 由于我们的仓库是私密仓库&#xff0c;需要通过ssh密钥的方法才…

RCE(远程代码执行)

在CTF&#xff08;Capture The Flag&#xff09;竞赛中&#xff0c;RCE&#xff08;Remote Code Execution&#xff0c;远程代码执行&#xff09;是一种常见的挑战类型&#xff0c;它考验参赛者发现并利用远程服务中的漏洞以执行任意代码的能力。RCE漏洞允许攻击者在远程服务器…

单例模式及其思想

本文包括以下几点↓ 结论&#xff1a;设计模式不是简单地将一个固定的代码框架套用到项目中&#xff0c;而是一种严谨的编程思想&#xff0c;旨在提供解决特定问题的经验和指导。 单例模式&#xff08;Singleton Pattern&#xff09; 意图 旨在确保类只有一个实例&#xff…

PyTorch乐器声音音频识别应用

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 乐器声音音频识别对实现自动化乐理分析、音乐信息检索和音频内容识别等应用具有重要意义。乐器声音音频识别是指通过对乐器演奏或录制的音频进行分析&#xff0c;自动判断出音频中所使用的乐器种类。这对于音乐家、音乐学者…

linux虚拟机设置固定ip

修改/etc/sysconfig/network-scripts/ifcfg-eth0文件 vim /etc/sysconfig/network-scripts/ifcfg-eth0BOOTPROTO设置为static&#xff0c;然后在最后添加固定IP地址和默认网关、DNS等配置&#xff0c;IP地址网段需和主机一致 IDADDR"192.168.1.14" NETMASK"25…

RabbitMQ高级特性 - 消费者消息确认机制

文章目录 RabbitMQ 消息确认机制背景消费者消息确认机制概述手动确认&#xff08;RabbitMQ 原生 SDK&#xff09;手动确认&#xff08;Spring-AMQP 封装 RabbitMQ SDK&#xff09;AcknowledgeMode.NONEAcknowledgeMode.AUTO&#xff08;默认&#xff09;AcknowledgeMode.MANUAL…