【C# 基础精讲】List 集合的使用

在这里插入图片描述

在C#中,List<T>是一种非常常用的泛型集合类,用于存储一组相同类型的元素。List<T>具有动态调整大小的能力,可以方便地添加、删除、查找和修改元素,非常灵活和高效。本文将详细介绍List<T>集合的使用方法,包括创建List<T>对象、添加元素、删除元素、查找元素、遍历集合以及常用的List<T>方法等内容。

1. 创建List<T>对象

要使用List<T>,需要引入System.Collections.Generic命名空间。创建List<T>对象时,需要指定集合中元素的类型T

using System.Collections.Generic;// 创建一个整数列表
List<int> numbersList = new List<int>();

在上述代码中,我们创建了一个List<int>类型的整数列表numbersList

2. 添加元素

List<T>提供了多个方法用于添加元素到列表中,最常用的是Add()方法。

List<string> fruitsList = new List<string>();// 添加元素到列表
fruitsList.Add("apple");
fruitsList.Add("orange");
fruitsList.Add("banana");

在上述代码中,我们创建了一个List<string>类型的字符串列表fruitsList,然后使用Add()方法添加了三个水果元素到列表中。

3. 删除元素

List<T>提供了多个方法用于删除元素,常用的有Remove()RemoveAt()Clear()方法。

Remove()方法

Remove()方法用于从列表中删除指定元素。如果列表中存在多个相同的元素,只会删除第一个匹配的元素。

List<string> fruitsList = new List<string> { "apple", "orange", "banana" };
fruitsList.Remove("orange"); // 从列表中删除元素"orange"

在上述代码中,Remove("orange")会删除列表fruitsList中的第一个元素"orange"。

RemoveAt()方法

RemoveAt()方法用于根据索引从列表中删除元素。

List<string> fruitsList = new List<string> { "apple", "orange", "banana" };
fruitsList.RemoveAt(1); // 从列表中删除索引为1的元素,即"orange"

在上述代码中,RemoveAt(1)会删除列表fruitsList中索引为1的元素"orange"。

Clear()方法

Clear()方法用于清空整个列表,即删除所有元素。

List<string> fruitsList = new List<string> { "apple", "orange", "banana" };
fruitsList.Clear(); // 清空列表

在上述代码中,Clear()会将列表fruitsList中的所有元素全部删除,列表变为空。

4. 查找元素

List<T>提供了多个方法用于查找元素,常用的有Contains()IndexOf()方法。

Contains()方法

Contains()方法用于判断列表中是否包含指定元素,返回一个布尔值。

List<string> fruitsList = new List<string> { "apple", "orange", "banana" };
bool isContains = fruitsList.Contains("orange"); // 判断列表是否包含元素"orange"

在上述代码中,isContains将会被赋值为true,因为列表fruitsList中包含元素"orange"。

IndexOf()方法

IndexOf()方法用于查找指定元素在列表中的索引,如果列表中存在多个相同的元素,只返回第一个匹配的元素索引。

List<string> fruitsList = new List<string> { "apple", "orange", "banana" };
int index = fruitsList.IndexOf("orange"); // 查找元素"orange"的索引

在上述代码中,index将会被赋值为1,表示元素"orange"在列表fruitsList中的索引为1。

5. 遍历List<T>

可以使用循环结构(如forforeach)遍历List<T>中的所有元素。

使用for循环遍历

List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };// 使用for循环遍历列表
for (int i = 0; i < numbersList.Count; i++)
{Console.WriteLine(numbersList[i]);
}

在上述代码中,for循环从0开始遍历到numbersList.Count - 1,依次输出列表中的每个元素。

使用foreach循环遍历

List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };// 使用foreach循环遍历列表
foreach (int number in numbersList)
{Console.WriteLine(number);
}

在上述代码中,foreach循环遍历numbersList列表中的每个元素,并将元素的值赋给变量number,然后输出number的值。

6. List<T>常用方法

除了上述介绍的方法外,List<T>还提供了许多其他常用的方法,方便对集合进行操作。下面列举一些常用的方法:

Count

Count属性用于获取列表中元素的个数。

List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };
int count = numbersList.Count; // 获取列表中元素的个数,此处为5

在上述代码中,count将会被赋值为5,表示列表numbersList中有5个元素。

Sort

Sort()方法用于对列表中的元素进行排序。

List<int> numbersList = new List<int> { 5, 2, 8, 1, 9 };
numbersList.Sort(); // 对列表中的元素进行排序

在上述代码中,numbersList列表将会被排序为 { 1, 2, 5, 8, 9 }

Reverse

Reverse()方法用于反转列表中元素的顺序。

List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };
numbersList.Reverse(); // 反转列表中元素的顺序

在上述代码中,numbersList列表将会被反转为 { 5, 4, 3, 2, 1 }

FindFindAll

Find()方法用于查找符合指定条件的第一个元素,返回满足条件的第一个元素,如果没有找到,则返回默认值。FindAll()方法用于查找符合指定条件的所有元素,返回一个新的List<T>列表。

List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };
int evenNumber = numbersList.Find(x => x % 2 == 0); // 查找第一个偶数元素
List<int> oddNumbers = numbersList.FindAll(x => x % 2 != 0); // 查找所有奇数元素

在上述代码中,evenNumber将会被赋值为2,oddNumbers将会是一个新的List<int>列表,包含所有的奇数元素。

RemoveAll

RemoveAll()方法用于根据指定条件删除所有符合条件的元素。

List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };
numbersList.RemoveAll(x => x % 2 == 0); // 删除所有偶数元素

在上述代码中,numbersList列表将会删除所有的偶数元素,变为 { 1, 3, 5 }

ForEach

ForEach()方法用于对列表中的每个元素执行指定的操作。

List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };
numbersList.ForEach(x => Console.WriteLine(x * 2)); // 将列表中的每个元素乘以2并输出

在上述代码中,ForEach()方法将列表中的每个元素都乘以2,并输出结果。

Exists

Exists()方法用于判断列表中是否存在符合指定条件的元素,返回一个布尔值。

List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };
bool isExists = numbersList.Exists(x => x > 3); // 判断是否存在大于3的元素

在上述代码中,isExists将会被赋值为true,因为列表numbersList中存在大于3的元素。

7. List<T>与数组的比较

在C#编程中,我们常常需要在集合中存储一组相同类型的数据。在选择使用List<T>还是数组时,需要根据实际需求来做出合理的选择。

数组的优点和适用场景

  • 性能更好: 数组在内存中是连续分配的,因此访问元素的性能更好,尤其是对于大量元素的访问。
  • 固定长度: 数组的长度一旦确定,就无法更改,这有助于保证数据的稳定性和安全性。
  • 多维数组: 数组支持多维数组,可以用于表示表格、矩阵等结构。

适用场景:当数据集合长度固定且需要频繁访问元素时,可以考虑使用数组。

List<T>的优点和适用场景

  • 动态调整大小: List<T>可以根据需要动态调整大小,无需提前指定长度,更加灵活。
  • 方便的添加和删除: List<T>提供了丰富的方法用于添加、删除和修改元素,操作更方便。
  • 适应不确定数据量: 当数据集合长度不确定,可能需要频繁添加或删除元素时,可以使用List<T>

适用场景:当数据集合长度不确定,或需要频繁进行添加、删除等操作时,可以考虑使用List<T>

8. 总结

List<T>是C#编程中非常常用的泛型集合类,用于存储一组相同类型的元素。本文介绍了List<T>的创建、添加、删除、查找和遍历等基本操作,以及常用的List<T>方法。同时,我们比较了List<T>与数组的优缺点和适用场景,希望可以帮助您在实际开发中做出合理的选择。List<T>提供了更多灵活性和便利性,尤其在处理不确定数据量的情况下更为常用。祝您在C#编程中灵活使用List<T>,编写出高效、可维护的代码!

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

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

相关文章

idea - 刷新 Git 分支数据 / 命令刷新 Git 分支数据

一、idea - 刷新 Git 分支数据 idea 找到 fetch 选项&#xff0c;重新获取分支数据 二、命令刷新 Git 分支数据 git fetch参考链接 1. 远程Gitlab新建的分支在IDEA里不显示

软考圈地震!2023年下半年软考改为机考,报名时间推迟到9月4日

【1】通知原文 关于2023年下半年计算机软件资格考试有关工作调整的通知 各省、自治区、直辖市及计划单列市、新疆生产建设兵团&#xff0c;香港、澳门计算机软件资格考试考务管理机构: 为全面做好计算机软件资格考试安全防控工作&#xff0c;确保考试公正、公平。现将有关工…

mysql8查看执行sql历史日志、慢sql历史日志,配置开启sql历史日志general_log、慢sql历史日志slow_query_log

0.本博客sql总结 -- 1.查看参数 -- 1.1.sql日志和慢sql日志输出方式(TABLE/FILE)。global参数 SHOW GLOBAL VARIABLES LIKE log_output; -- 1.2.sql日志开关。global参数 SHOW GLOBAL VARIABLES LIKE general_log%; -- 1.3.慢sql日志开关。global参数 SHOW GLOBAL VARIABLE…

前端下载文件

前端可以通过使用 JavaScript中的 fetch 或者 XMLHttpRequest 来下载文件&#xff1b; 使用fetch进行文件下载&#xff1b; fetch(http://example.com/file.pdf).then(response > response.blob()).then(blob > {// 创建一个临时的URL对象const url window.URL.create…

服务端高并发分布式结构演进之路

目录 一、常见概念 1.1基本概念 二、架构演进 2.1单机架构 2.2应用数据分离架构 2.3应用服务集群架构 2.4读写分离 / 主从分离架构 2.5引入缓存 —— 冷热分离架构 2.6垂直分库 2.7业务拆分 —— 微服务 一、常见概念 1.1基本概念 应用&#xff08;Application&am…

树结构--介绍--二叉树遍历的递归实现

目录 树 树的学术名词 树的种类 二叉树的遍历 算法实现 遍历命名 二叉树的中序遍历 二叉树的后序遍历 二叉树的后序遍历迭代算法 二叉树的前序遍历 二叉树的前序遍历迭代算法 树 树是一种非线性的数据结构&#xff0c;它是由n(n≥0)个有限节点组成一个具有层次关系…

关于Postman如何配置随请求携带token

文章目录 一些吐槽实际应用 一些吐槽 首先吐槽一下 postman官网的文档说明&#xff0c;真是乱七八糟&#xff0c;一点都不清晰&#xff0c;能不能好好写用户手册啊&#xff08;比如把用户都当作初始小白&#xff09; 然后吐槽一下网上铺天盖地让我写js脚本应用全局access toke…

C#实现三菱FX-3U SerialOverTcp

设备信息 测试结果 D值测试 Y值写入后读取测试 协议解析 三菱FX 3U系列PLC的通信协议 1. 每次给PLC发送指令后&#xff0c;必须等待PLC的应答完成才能发送下一条指令; 2. 报文都是十六进制ASCII码的形式 3. 相关指令 指令 命令码&#xff08;ASCII码&#xff09; 操作原件 …

MYSQL进阶-查询优化- 实战 STATUS

回城传送–》《100天精通MYSQL从入门到就业》 文末有送书活动&#xff0c;可以参加&#xff01; 文章目录 一、练习题目二、SQL思路SQL进阶-查询优化- SHOW STATUS初始化数据解法SHOW STATUS是什么实战经验&#xff1a;常用的mysql状态查询1、QPS(每秒处理的请求数量)计算思路…

makefile include 使用介绍

文章目录 前言一、include 关键字1. 语法介绍2. 处理方式示例&#xff1a; 二、- include 操作总结 前言 一、include 关键字 1. 语法介绍 在 Makefile 中&#xff0c;include 指令&#xff1a; 类似于 C 语言中的 include 。将其他文件的内容原封不动的搬入当前文件。 当 …

uniapp调查问卷评价功能

我本来用的是uniapp官方提供的组件uni-rate组件&#xff0c;但修改成我想要的样式有点麻烦&#xff0c;于是我就自己手写一个&#xff0c;比用组件简单一点&#xff1b; dom结构 <text class"formTit must">请您对本次活动进行评价</text> <view cl…

SQL注入实操三(SQLilabs Less41-65)

文章目录 一、sqli-labs靶场1.轮子模式总结2.Less-41 stacked Query Intiger type blinda.注入点判断b.轮子测试c.获取数据库名称d.堆叠注入e.堆叠注入外带注入获取表名f.堆叠注入外带注入获取列名g.堆叠注入外带注入获取表内数据 3.Less-42 Stacked Query error baseda.注入点…

idea使用protobuf

本文参考&#xff1a;https://blog.csdn.net/m0_37695902/article/details/129438549 再次感谢分享 什么是 protobuf &#xff1f; Protocal Buffers(简称protobuf)是谷歌的一项技术&#xff0c;用于结构化的数据序列化、反序列化。 由于protobuf是跨语言的&#xff0c;所以用…

【数理知识】求刚体旋转矩阵和平移矩阵,已知 N>=3 个点在前后时刻的坐标,且这 N>=3 点间距离始终不变代表一个刚体

序号内容1【数理知识】自由度 degree of freedom 及自由度的计算方法2【数理知识】刚体 rigid body 及刚体的运动3【数理知识】刚体基本运动&#xff0c;平动&#xff0c;转动4【数理知识】向量数乘&#xff0c;内积&#xff0c;外积&#xff0c;matlab代码实现5【数理知识】协…

【Spring Boot】Thymeleaf模板引擎 — Thymeleaf的高级用法

Thymeleaf的高级用法 主要介绍Thymeleaf的内联、内置对象、内置变量等高级用法。 1.内联 虽然通过Thymeleaf中的标签属性已经几乎满足了开发中的所有需求&#xff0c;但是有些情况下需要在CSS或JS中访问后台返回的数据。所以Thymeleaf提供了th:inline"text/javascript/…

spring boot策略模式实用: 告警模块为例

spring boot策略模式实用: 告警模块 0 涉及知识点 策略模式, 模板方法, 代理, 多态, 反射 1 需求概括 场景: 每隔一段时间, 会获取设备运行数据, 如通过温湿度计获取到当前环境温湿度;需求: 对获取回来的进行分析, 超过配置的阈值需要产生对应的告警 2 方案设计 告警的类…

vuejs 设计与实现 - 双端diff算法

我们介绍了简单 Diff 算法的实现原理。简单 Diff 算法利用虚拟节点的 key 属性&#xff0c;尽可能地复用 DOM元素&#xff0c;并通过移动 DOM的方式来完成更新&#xff0c;从而减少不断地创建和销毁 DOM 元素带来的性能开销。但是&#xff0c;简单 Diff 算法仍然存在很多缺陷&a…

数据结构——双向链表

双向链表实质上是在单向链表的基础上加上了一个指针指向后面地址 单向链表请参考http://t.csdn.cn/3Gxk9 物理结构 首先我们看一下两种链表的物理结构 我们可以看到&#xff1a;双向在单向基础上加入了一个指向上一个地址的指针&#xff0c;如此操作我们便可以向数组一样操作…

【TypeScript】中关于 { 声明合并 } 的使用及注意事项

概念&#xff1a; 在TS中&#xff0c;如果定义了多个相同命名的函数&#xff0c;接口或者class 类&#xff0c;那么它们会自动合并成一个类型 函数的合并&#xff1a; 前面章节讲解的函数重载就是使用了定义多个函数的类型进行合并&#xff1a; function reverse(x: number):…

树状结构数据,筛选指定数据

问题描述&#xff1a; 应用场景和需求&#xff1a;对一个树状结构的数据&#xff0c;进行CRUD 时&#xff0c;想筛选出 树状结构数据中存在变动的部分。 操作步骤 准备需要的数据&#xff1a; 1.先拿到 你原来的树状结构数据 2.再筛选出 需要保留的数据集合id&#xff0c;也…