C#的List是System.Collections.Generic命名空间下的泛型集合类,它可以存储指定类型的元素,并且长度可以动态变化,不需要像数组一样在初始化时就确定固定长度,使用起来比数组更加灵活方便。

List的基础定义与初始化
使用List之前需要先引入对应的命名空间,然后通过指定泛型类型来定义List实例,初始化时可以指定初始容量,也可以直接添加初始元素。
using System.Collections.Generic;
// 定义一个存储int类型的List,初始为空
List<int> numList = new List<int>();
// 定义一个存储string类型的List,同时添加初始元素
List<string> nameList = new List<string>() { "张三", "李四", "王五" };
List的添加操作
List提供了多种添加元素的方法,最常用的是Add方法添加单个元素,还有AddRange方法批量添加多个元素。
添加单个元素
使用Add方法可以将指定类型的元素添加到List的末尾,List的长度会自动扩容。
List<int> numList = new List<int>(); // 添加单个整数元素 numList.Add(10); numList.Add(20); numList.Add(30); // 此时numList包含元素:10,20,30
批量添加元素
如果已经有多个同类型的元素需要添加到List中,可以使用AddRange方法,传入一个集合即可一次性添加所有元素。
List<int> numList = new List<int>() { 1, 2, 3 };
List<int> newNums = new List<int>() { 4, 5, 6 };
// 批量添加newNums中的所有元素到numList
numList.AddRange(newNums);
// 此时numList包含元素:1,2,3,4,5,6
List的删除操作
List支持多种删除元素的方式,可以根据元素值删除、根据索引删除,也可以清空所有元素。
根据索引删除元素
使用RemoveAt方法可以删除指定索引位置的元素,索引从0开始计数,如果传入的索引超出范围会抛出异常。
List<string> nameList = new List<string>() { "张三", "李四", "王五", "赵六" };
// 删除索引为1的元素,也就是"李四"
nameList.RemoveAt(1);
// 此时nameList包含元素:张三,王五,赵六
根据元素值删除元素
使用Remove方法可以删除第一个匹配指定值的元素,如果元素存在则返回true,不存在则返回false。
List<string> nameList = new List<string>() { "张三", "李四", "王五", "李四" };
// 删除第一个值为"李四"的元素
bool isRemoved = nameList.Remove("李四");
// isRemoved为true,此时nameList包含元素:张三,王五,李四
清空所有元素
如果需要删除List中的所有元素,可以使用Clear方法,调用后List的长度会变为0。
List<int> numList = new List<int>() { 1, 2, 3, 4 };
// 清空所有元素
numList.Clear();
// 此时numList为空,长度为0
List的排序操作
List的排序可以通过Sort方法实现,默认会按照元素的默认比较规则进行升序排序,也支持自定义排序规则。
默认升序排序
对于int、string等内置类型,Sort方法会按照默认的升序规则排序,比如int从小到大,string按字母顺序。
List<int> numList = new List<int>() { 5, 2, 8, 1, 3 };
// 默认升序排序
numList.Sort();
// 此时numList包含元素:1,2,3,5,8
List<string> nameList = new List<string>() { "王五", "张三", "李四" };
// 字符串默认按拼音升序排序
nameList.Sort();
// 此时nameList包含元素:李四,王五,张三
自定义排序规则
如果默认排序规则不满足需求,可以给Sort方法传入一个比较委托,自定义两个元素的比较逻辑。
List<int> numList = new List<int>() { 5, 2, 8, 1, 3 };
// 自定义降序排序规则:如果x大于y返回-1,实现降序
numList.Sort((x, y) => {
if (x > y) return -1;
if (x < y) return 1;
return 0;
});
// 此时numList包含元素:8,5,3,2,1
操作注意事项
在对List进行删除操作时,要注意避免在遍历过程中直接删除元素,否则可能会导致索引错乱或者漏删元素,正确的做法可以先记录要删除的索引或者元素,遍历完成后再统一删除,或者使用倒序遍历的方式删除。
另外List的Sort方法是原地排序,会直接修改原List的元素顺序,如果需要保留原List的顺序,可以先复制一份List再对新副本进行排序。