了解如何使用泛型列表类型管理数据集合
本教程通过交互方式介绍了 C#,读者可以使用浏览器编写 C# 代码,并查看代码编译和运行结果。 它包含一系列有关创建、修改和探索集合和数组的课程。
提示
若要在焦点模式下粘贴代码片段,应使用键盘快捷方式(Ctrl + v 或 cmd + v)。
创建列表
在交互式窗口中,运行以下代码。 选择“进入焦点模式”按钮。 然后,在交互式窗口中键入以下代码块(将 <name>
替换为自己的名称),再选择“运行”:
var names = new List<string> { "<name>", "Ana", "Felipe" };
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
如果在环境中运行此操作,则应改为按照本地版本的说明进行操作。
你已创建了一个字符串列表,在该列表中添加了三个名称,并打印了所有大写的名称。 循环读取整个列表需要用到在前面的教程中学到的概念。
用于显示名称的代码使用字符串内插功能。 如果 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 开始编制,因此最大有效索引是用列表项数减 1 计算得出。
搜索列表并进行排序
我们的示例使用的列表较小,但大家的应用程序创建的列表通常可能会包含更多元素,有时可能会包含数以千计的元素。 若要在更大的集合中查找元素,需要在列表中搜索不同的项。 IndexOf 方法可搜索项,并返回此项的索引。 如果项不在列表中,IndexOf
将返回 -1
。 试试此方法,看看它是如何工作的。 在当前已编写的代码下方添加以下代码:
var index = names.IndexOf("Felipe");
if (index != -1)
Console.WriteLine($"The name {names[index]} is at index {index}");
var notFound = names.IndexOf("Not Found");
Console.WriteLine($"When an item is not found, IndexOf returns {notFound}");
可能无法确定列表是否包含某项,因此,应始终检查 IndexOf 返回的索引。 如果索引为 -1
,则找不到相应项。
还可以对列表中的项进行排序。 Sort 方法按正常顺序(如果是字符串则按字母顺序)对列表中的所有项进行排序。 添加以下代码,再试运行看看:
names.Sort();
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
其他类型的列表
到目前为止,大家一直在列表中使用 string
类型。 接下来,将让 List<T> 使用其他类型。 那就生成一组数字吧。 删除迄今为止编写的代码,并将其替换为以下代码:
var fibonacciNumbers = new List<int> {1, 1};
这会创建一个整数列表,并将头两个整数设置为值 1。 斐波纳契数列,一串以两个 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。)
完成挑战
最后是否生成如下代码?
var fibonacciNumbers = new List<int> {1, 1};
while (fibonacciNumbers.Count < 20)
{
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 个项为止。
恭喜!
你已完成列表交互式教程。 这是 C# 交互式教程的最终简介。 可以访问 .NET 站点下载 .NET SDK,在计算机上创建项目,并继续编码。 请通过“后续步骤”部分返回到这些教程。
可以在以下文章中了解有关 .NET 集合的详细信息:
你有关于此部分的问题? 如果有,请向我们提供反馈,以便我们对此部分作出改进。
反馈
提交和查看相关反馈