C# List<T> Collection

本文关键字:Collection gt lt List | 更新日期: 2023-09-12 17:39:24

List<T>是强类型对象的集合,可以通过索引访问这些对象,并具有用于排序、搜索和修改列表的方法。它是ArrayList的泛型版本,属于System.Collections.Generic命名空间。

List<T> Characteristics

  • List<T>等价于 ArrayList,它实现了IList<T>
  • 它属于System.Collections.Generic命名空间。
  • List<T>可以包含指定类型的元素。它提供编译时类型检查,并且不执行装箱拆箱,因为它是泛型的。
  • 可以使用Add()AddRange()方法或集合初始值设定项语法添加元素。
  • 可以通过传递索引来访问元素,例如 myList[0] .索引从零开始。
  • List<T>ArrayList 执行得更快、更不容易出错。

创建列表

List<T> 是一个泛型集合,因此您需要为其可以存储的数据类型指定类型参数。 下面的示例演示如何创建列表和添加元素。

Example: Adding elements in List

List<int> primeNumbers = new List<int>();
primeNumbers.Add(1); // adding elements using add() method
primeNumbers.Add(3);
primeNumbers.Add(5);
primeNumbers.Add(7);
var cities = new List<string>();
cities.Add("New York");
cities.Add("London");
cities.Add("Mumbai");
cities.Add("Chicago");
cities.Add(null);// nulls are allowed for reference type list
//adding elements using collection-initializer syntax
var bigCities = new List<string>()
                    {
                        "New York",
                        "London",
                        "Mumbai",
                        "Chicago"                    
                    };

在上面的示例中,List<int> primeNumbers = new List<int>(); 创建一个 int 类型的列表。同样,cities bigCities是字符串类型列表。然后,可以使用 Add() 方法或集合初始值设定项语法在列表中添加元素。

还可以使用集合初始值设定项语法添加自定义类的元素。下面在List<Student>中添加Student类的对象。

Example: Add Custom Class Objects in List

var students = new List<Student>() { 
                new Student(){ Id = 1, Name="Bill"},
                new Student(){ Id = 2, Name="Steve"},
                new Student(){ Id = 3, Name="Ram"},
                new Student(){ Id = 4, Name="Abdul"}
            };

在列表中添加数组

使用 AddRange() 方法将数组或其他集合中的所有元素添加到 List。

添加范围() 签名:void AddRange(IEnumerable<T> collection)

Example: Add Arrays in List

string[] cities = new string[3]{ "Mumbai", "London", "New York" };
var popularCities = new List<string>();
// adding an array in a List
popularCities.AddRange(cities);
var favouriteCities = new List<string>();
// adding a List 
favouriteCities.AddRange(popularCities);

访问列表

可以通过索引、for/foreach 循环和使用 LINQ 查询来访问列表。列表的索引从零开始。传递方括号中的索引以访问单个列表项,与数组相同。使用 foreachfor 循环循环循环访问List<T>集合。

Example: Accessing List

List<int> numbers = new List<int>() { 1, 2, 5, 7, 8, 10 };
Console.WriteLine(numbers[0]); // prints 1
Console.WriteLine(numbers[1]); // prints 2
Console.WriteLine(numbers[2]); // prints 5
Console.WriteLine(numbers[3]); // prints 7
// using foreach LINQ method
numbers.ForEach(num => Console.WriteLine(num + ", "));//prints 1, 2, 5, 7, 8, 10,
// using for loop
for(int i = 0; i < numbers.Count; i++)
    Console.WriteLine(numbers[i]);

使用 LINQ 访问列表

List<T>实现IEnumerable接口。因此,我们可以使用 LINQ 查询语法或方法语法查询列表,如下所示。

Example: LINQ Query on List

var students = new List<Student>() { 
                new Student(){ Id = 1, Name="Bill"},
                new Student(){ Id = 2, Name="Steve"},
                new Student(){ Id = 3, Name="Ram"},
                new Student(){ Id = 4, Name="Abdul"}
            };
//get all students whose name is Bill
var result = from s in students
	     where s.Name == "Bill"
	     select s;
		
foreach(var student in result)
    Console.WriteLine(student.Id + ", " + student.Name);

在列表中插入元素

使用 Insert() 方法将元素插入到List<T>集合的指定索引处。

插入() 签名:void Insert(int index, T item);

Example: Insert elements into List

var numbers = new List<int>(){ 10, 20, 30, 40 };
numbers.Insert(1, 11);// inserts 11 at 1st index: after 10.
foreach (var num in numbers)
    Console.Write(num);

从列表中删除元素

使用 Remove() 方法删除 List<T> 集合中指定元素的第一个匹配项。使用 RemoveAt() 方法从指定的索引中删除元素。如果指定索引处没有元素,则将抛出ArgumentOutOfRangeException

Remove(

) 签名: bool Remove(T item)

RemoveAt() 签名:void RemoveAt(int index)

Example: Remove elements from List

var numbers = new List<int>(){ 10, 20, 30, 40, 10 };
numbers.Remove(10); // removes the first 10 from a list
numbers.RemoveAt(2); //removes the 3rd element (index starts from 0)
//numbers.RemoveAt(10); //throws ArgumentOutOfRangeException
foreach (var el in intList)
    Console.Write(el); //prints 20 30

检查列表中的元素

使用 Contains() 方法确定元素是否在List<T>中。

Example: Contains()

var numbers = new List<int>(){ 10, 20, 30, 40 };
numbers.Contains(10); // returns true
numbers.Contains(11); // returns false
numbers.Contains(20); // returns true

列表<T>类层次结构

下图说明了List<T>层次结构。

List<T> 类属性和方法

下表列出了List<T>类的重要属性和方法:

List<T> Class Properties and Methods

PropertyUsage
Items获取或设置指定索引处的元素
Count返回列表中元素总数
MethodUsage
Add在 List<T>的末尾添加一个元素。
AddRange在 List<T> 的末尾添加指定集合的元素。
BinarySearch搜索元素并返回元素的索引。
Clear从列表中删除所有元素<T>。
Contains检查指定的元素是否存在于 List<T>。
Find基于指定的谓词函数查找第一个元素。
Foreach循环访问列表<T>。
Insert在 List<T> 的指定索引处插入元素。
InsertRange在指定索引处插入另一个集合的元素。
Remove删除指定元素的第一个匹配项。
RemoveAt删除指定索引处的元素。
RemoveRange删除与提供的谓词函数匹配的所有元素。
排序对所有元素进行排序。
TrimExcess将容量设置为实际元素数。
TrueForAll确定 List<T> 中的每个元素是否与指定谓词定义的条件匹配。