了解如何使用 C 中的列表<T> 管理数据收集#

本介绍性教程介绍了 C# 语言和类的基础知识。

本教程以交互方式讲解 C# ,使用浏览器编写 C# 代码,并查看编译和运行代码的结果。 它包含一系列课程,用于创建、修改和浏览集合和数组。 你主要处理该 List<T> 类(class)。

基本列表示例

小提示

当代码片段块包含“运行”按钮时,该按钮将打开交互式窗口,或替换交互式窗口中的现有代码。 当代码片段不包含“运行”按钮时,可以复制代码并将其添加到当前交互式窗口。

在交互式窗口中运行以下代码。 将 <name> 替换为你的名字,然后选择运行

List<string> names = ["<name>", "Ana", "Felipe"];
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

你创建了字符串列表,向该列表添加了三个名称,并打印了所有 CAPS 中的名称。 循环读取整个列表需要用到在前面的教程中学到的概念。

用于显示名称的代码使用 字符串内插 功能。 当在string前加上$字符时,可以在字符串声明中嵌入 C# 代码。 实际字符串将 C# 代码替换为它生成的值。 在此示例中,{name.ToUpper()} 被替换为各个转换为大写字母的名称,因为调用了 String.ToUpper 方法。

让我们继续探索。

修改列表内容

创建的集合使用 List<T> 类型。 此类型存储元素序列。 指定尖括号之间的元素的类型。

List<T> 类型的一个重要方面是它可以增长或收缩,使你能够添加或删除元素。 在显示其内容后,通过修改内容,可以查看结果。 在你已编写的代码(打印内容的循环)之后添加以下代码:

Console.WriteLine();
names.Add("Maria");
names.Add("Bill");
names.Remove("Ana");
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

你向列表末尾添加了两个名称。 同时,也删除了一个名称。 此代码块的输出显示初始内容,然后输出空白行和新内容。

通过 List<T>,您还可以按 索引引用各个项。 使用 [] 令牌访问这些项。 在已编写代码后添加以下代码,然后尝试:

Console.WriteLine($"My name is {names[0]}.");
Console.WriteLine($"I've added {names[2]} and {names[3]} to the list.");

不得访问超出列表末尾的项。 可以检查列表使用 Count 属性的时间。 添加以下代码:

Console.WriteLine($"The list has {names.Count} people in it");

再次选择 “运行” 以查看结果。 在 C# 中,索引从 0 开始,因此最大有效索引小于列表中的项数。

搜索列表并进行排序

我们的示例使用相对较小的列表,但应用程序通常会创建包含更多元素的列表,有时以数千个元素进行编号。 若要查找这些较大的集合中的元素,需要搜索列表以查找不同的项。 该方法 IndexOf 搜索项并返回项的索引。 如果该项不在列表中,IndexOf 返回-1。 尝试查看其工作原理。 在到目前为止编写的代码后面添加以下代码:

var index = names.IndexOf("Felipe");
if (index == -1)
{
    Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
    Console.WriteLine($"The name {names[index]} is at index {index}");
}

index = names.IndexOf("Not Found");
if (index == -1)
{
    Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
    Console.WriteLine($"The name {names[index]} is at index {index}");
}

你可能不知道某个项是否在列表中,因此应始终检查返回的 IndexOf索引。 -1如果是,则找不到该项。

也可以对列表中的项进行排序。 该方法 Sort 按常规顺序对列表中的所有项进行排序(按字母顺序排列)。。 添加此代码并再次运行:

names.Sort();
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

其他类型的列表

到目前为止,你一直在列表中使用 string 类型。 接下来,将让 List<T> 使用其他类型。 让我们生成一组数字。 删除到目前为止编写的代码,并将其替换为以下代码:

List<int> fibonacciNumbers = [1, 1];

这创建整数列表,并将前两个整数设置为值 1。 Fibonacci 序列,一个数字序列,以两个 1' 开头。 接下来的每一个菲博纳奇数都是通过获取前两个数字的总和找到的。 添加以下代码:

var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];

fibonacciNumbers.Add(previous + previous2);

foreach (var item in fibonacciNumbers)
{
    Console.WriteLine(item);
}

“运行” 查看结果;

挑战

看看你能否从本课和早期课程中总结出一些概念。 扩展你迄今为止使用菲博纳奇数字构建的内容。 尝试编写代码以生成序列中的前 20 个数字。 (作为提示,第20个菲博纳奇数字是6765。

你想到这样的东西吗?

:::code language=“csharp” interactive=“try-dotnet-method” source=“./snippets/ListCollection/Program.cs” id=“Answer”::

每次循环迭代时,你将获取列表中的最后两个整数,对它们求和,并将该值添加到列表中。 循环重复,直到向列表中添加了 20 个项目。

你已完成列表交互式教程,这是 C# 交互式教程的最终简介。 可以访问 .NET 站点来下载 .NET SDK、在计算机上创建项目以及继续编码。 “后续步骤”部分将引导您返回这些教程。 或者,可以继续 学习使用类和对象教程进行面向对象的探索编程

可以在以下文章中了解有关 .NET 集合 的详细信息: