首页 > 编程笔记 > C#笔记 阅读:6

C# List列表用法详解(附带实例)

本节介绍 C# 中泛型的 List 类,它其实是泛型版本的 ArrayList,两者都是数组结构的数据,在连续的内存空间,不过 List 在数据元素的应用上更具弹性。

C#创建List对象

如果只是创建 List 对象,则可以使用下列语法:
List<T> 对象名称 = new List<T>();

如果要创建 List 对象,同时还要设定此对象的容量,则可以增加 Int32 参数,详情可以参考下列语法:
List<T> 对象名称 = new List<T>(Int32);

如果要创建 List 对象,同时设置初始值,则可以使用下列语法:
List<int> 对象名称 = new List<int> { 系列初始值 }

【实例 1】创建整型和字符串型的 List 对象,然后输出。
List<int> sc = new List<int> { 5, 7, 9 };
foreach (var s in sc)
    Console.Write($"{s} ");
Console.WriteLine(); // 换行输出
List<string> book = new List<string> { "Python", "C#" };
foreach (var b in book)
    Console.Write($"{b} ");
Console.WriteLine(); // 换行输出
var cities = new List<string> { "Taipei", null, "Tainan" };
foreach (var c in cities)
    Console.Write($"{c} ");
执行结果为:

5 7 9
Python C#
Taipei  Tainan

上述程序请读者留意第 5 行和第 9 行的声明方式,此外第 9 行笔者故意使用 null 作为数据也是可以的。

如果要创建 List 对象,同时将指定项目复制至此对象,可以使用下列语法:
List<T> 对象名称 = new List<T>(IEnumerable<T>);
注意,上述 IEnumerable 是源自 System.Collections 命名空间的接口,这个接口的定义是元素可以被迭代。所以在此 IEnumerable<T> 是指可以迭代的数据类型,均可当作指定项目复制到 List 对象名称内。

此外,ICollection 是一个接口,这个接口继承 IEnumerable,这类集合的内容可以编辑修改。

【实例 2】创建 List 对象,同时将可以列举的数据复制至此对象,此例中可以列举的数据是指 books 字符串数组。
string[] books = { "C语言入门教程",
    "C++基础教程",
    "Python基础教程" };

List<string> mybooks = new List<string>(books);
foreach (string m in mybooks)
{
    Console.WriteLine(m);
}
执行结果为:

C语言入门教程
C++基础教程
Python基础教程

C# List的属性

List 的常用属性如下:
【实例 3】认识 Capacity 和 Count 属性。
List<string> myList = new List<string>();
Console.WriteLine("输出空List变量的Capacity和Count属性");
Console.WriteLine(myList.Capacity);
Console.WriteLine(myList.Count);

Console.WriteLine("输出有数据List变量的Capacity和Count属性");
string[] books = {  "C语言入门教程",
    "C++基础教程",
    "Python基础教程" };

List<string> mybooks = new List<string>(books);
Console.WriteLine(mybooks.Capacity);
Console.WriteLine(mybooks.Count);
执行结果为:

输出空List变量的Capacity和Count属性
0
0
输出有数据List变量的Capacity和Count属性
3
3

C# List方法

List 的常用方法如下:

方法名称 描述
List<T>.Add(T) 在对象末端增加元素。
List<T>.Insert(Int32, T) 在对象指定索引位置插入元素。
List<T>.Contains(T) 回传元素是否存在,如果存在则回传 true,反之则回传 false。
List<T>.Clear() 清除所有元素。
List<T>.Remove(T) 删除第一个相符的元素。
List<T>.RemoveAt(Int32) 删除指定索引的元素。
List<T>.RemoveRange(Int32, Int32) 删除指定范围的元素。
List<T>.IndexOf(T) 回传元素第一次出现的索引。
List<T>.LastIndexOf(T) 回传最后出现字符串的索引位置。
List<T>.Sort() 元素排序。
List<T>.Reverse() 元素反转排列。

【实例 4】Add()、Sort() 和 Reverse() 方法的应用。
List<int> number = new List<int>();
number.Add(10);
number.Add(20);
number.Add(5);
Console.WriteLine("依据创建顺序输出");
foreach (int n in number)
{
    Console.Write(n + " ");
}
Console.WriteLine("\n依据反向排列输出");
number.Reverse();
foreach (int n in number)
{
    Console.Write(n + " ");
}
Console.WriteLine("\n依据排序输出");
number.Sort();
foreach (int n in number)
{
    Console.Write(n + " ");
}
执行结果为:

依据创建顺序输出
10 20 5
依据反向排列输出
5 20 10
依据排序输出
5 10 20

相关文章