List的定义
列表(List)是一种常用的集合类型,它属于System.Collections.Generic命名空间。列表是一个有序集合,可以包含重复的元素,并且可以根据索引访问元素。
List< T >
List<T>
是一个泛型集合,它提供了比数组更灵活的方式来存储和操作数据。List<T>
继承自 IList<T>
接口,并实现了许多用于添加、移除、搜索、排序等操作的方法。
通过指定类型参数 T
来定义一个 List<T>
。例如存储一个字符串列表,可以这样定义:
csharp
List<string> myStringList = new List<string>();
常用方法
Add(T item)
向列表的末尾添加一个元素。
csharp
myStringList.Add("Hello");
myStringList.Add("World");
AddRange(IEnumerable collection)
向列表的末尾添加一系列元素。
csharp
List<string> moreStrings = new List<string> { "C#", "Programming" };
myStringList.AddRange(moreStrings);
Remove(T item)
从列表中移除第一个匹配的元素。
csharp
myStringList.Remove("Hello");
RemoveAt(int index)
根据索引移除列表中的元素。
csharp
myStringList.RemoveAt(0); // 假设 "World" 是第一个元素
Clear()
移除列表中的所有元素。
csharp
myStringList.Clear();
Find(Predicate match)
返回列表中第一个匹配指定条件的元素。
csharp
string found = myStringList.Find(item => item.StartsWith("C#"));
Console.WriteLine(found); // 输出 "C#"
FindAll(Predicate match)
返回一个新列表,包含所有匹配指定条件的元素。
csharp
List<string> filteredList = myStringList.FindAll(item => item.Length > 4);
foreach (var item in filteredList)
{
Console.WriteLine(item);
}
Sort()
对列表中的元素进行排序。
csharp
myIntList.Add(3);
myIntList.Add(1);
myIntList.Add(2);
myIntList.Sort();
foreach (var item in myIntList)
{
Console.WriteLine(item);
}
// 输出将按升序排列:1, 2, 3
Exists(Predicate match)
确定列表是否包含符合指定条件的元素。
csharp
bool containsLongWord = myStringList.Exists(item => item.Length > 5);
Console.WriteLine(containsLongWord); // 如果列表中有长度大于5的字符串,则输出 True
Contains(T item)
确定列表中是否包含特定元素。
csharp
bool containsHello = myStringList.Contains("Hello");
Console.WriteLine(containsHello); // 如果列表中包含 "Hello",则输出 True
插入元素
-
Insert(int index, T item) :
在列表的指定索引处插入一个元素。如果索引超出当前列表的范围,则会抛出异常。
csharpmyStringList.Insert(1, "Middle"); // 在索引1的位置插入"Middle"
-
InsertRange(int index, IEnumerable collection) :
在列表的指定索引处插入一个集合的元素。这允许你一次性在列表的特定位置插入多个元素。
csharpList<string> moreItems = new List<string> { "Extra1", "Extra2" }; myStringList.InsertRange(2, moreItems); // 在索引2的位置插入moreItems集合
复制与转换
-
CopyTo(T[] array, int arrayIndex) :
将整个列表的元素复制到一个已存在的一维数组中,从指定的数组索引开始复制。
csharpstring[] array = new string[myStringList.Count]; myStringList.CopyTo(array, 0);
-
ToArray() :
将列表的内容复制到一个新的数组中,并返回这个数组。
csharpstring[] arrayFromList = myStringList.ToArray();
容量与计数
-
Capacity :
这是一个属性,用于获取或设置列表内部数据结构可以存储的总元素数。当列表的元素数量超过其容量时,它会自动扩容。
csharpint currentCapacity = myStringList.Capacity; // 获取当前容量 myStringList.Capacity = 100; // 设置新容量(注意:如果小于当前元素数量,可能会抛出异常)
-
Count :
这是一个属性,用于获取列表中实际包含的元素数。
csharpint numberOfItems = myStringList.Count;
索引器与查找
-
Indexer (Item[int index]) :
List<T>
支持索引器,允许你通过索引直接访问或修改列表中的元素。csharpstring firstItem = myStringList[0]; // 访问第一个元素 myStringList[0] = "FirstItemModified"; // 修改第一个元素
-
IndexOf(T item) :
搜索列表中指定的对象,并返回该对象的第一个匹配项的索引。如果没有找到对象,则返回 -1。
csharpint indexOfHello = myStringList.IndexOf("Hello");
-
LastIndexOf(T item) :
与
IndexOf
方法类似,但它从列表的末尾开始搜索,并返回指定对象的最后一个匹配项的索引。csharpint lastIndexOfHello = myStringList.LastIndexOf("Hello");
提取子列表
-
GetRange(int index, int count) :
获取列表中从指定索引开始的指定数量的连续元素,并返回包含这些元素的新列表。
csharpList<string> subList = myStringList.GetRange(1, 2); // 从索引1开始获取2个元素
清理与效率
-
TrimExcess() 或 TrimToSize() (取决于.NET版本):
减少内部数组的容量以匹配列表中元素的数量。这有助于减少内存使用,但请注意,这并不减少
Capacity
属性的值(在TrimExcess
的情况下),只是减少了内部数组的实际分配大小。在某些版本中,这个方法可能被命名为TrimToSize
。csharpmyStringList.TrimExcess(); // 或 myStringList.TrimToSize(); 取决于.NET版本