IRONSOFTWAREHOME

了解 C# 数组

理解 C# 数组:Layla Porter 关于 C# 数组和循环的视频见解

Layla Porter

21m 53s

C# 中的数组是一种基本数据结构,它允许开发人员将相同类型的元素集合存储在连续的内存位置中。 数组可以是一维的、多维的,或者不规则的。

本文关于 C# 数组的内容灵感来源于 Layla Porter 的教学视频" C# 入门教程 第 5 部分 - 数组和更多循环"。在她的视频中,Layla 深入讲解了数组的基础知识,并介绍了 C# 中的更多循环技巧,使观众掌握管理集合和有效遍历数据的基本技能。

理解数组

Layla 首先解释了 C# 中的数组是固定长度的集合。 与其他一些编程语言中数组可以动态改变大小不同,C# 中的数组一旦创建就不可更改。 这意味着由于内存分配限制,初始化后它们的大小无法改变。

简单的控制台交互:选择你最喜欢的奶酪

在以下代码中,与数组不同,Layla (1:50) 首先演示了如何向用户呈现一个项目列表,供他们选择。

Console.WriteLine("Hello, what is your favourite cheese from this list?");
Console.WriteLine("1. Stilton");
Console.WriteLine("2. Cheddar");
Console.WriteLine("3. Pineapple");
Console.WriteLine("4. Brie");
var favouriteCheese = Console.ReadLine();
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");

这段代码首先使用Console.WriteLine在控制台打印一条消息,询问用户他们最喜欢的奶酪是什么。 然后它使用Console.WriteLine再四次在控制台打印奶酪列表。 接着代码使用favouriteCheese中。 最后,代码再次使用Console.WriteLine在控制台打印一个消息,其中包含用户最喜欢的奶酪。

Layla 在 2 分 04 秒处执行了这段代码,以演示其工作原理:

声明数组 - 数组初始化

为了说明这一点,Layla 首先演示了如何声明和初始化一个字符串数组,在本例中,这是一个最初作为菜单呈现给用户的奶酪列表。 她介绍了定义一维数组的语法(2:30)以及使用花括号填充初始值的语法(2:54)。

string[] cheeses = { "Brie", "Cheddar", "Stilton", "Gouda" };

她强调了数组中从零开始索引的重要性,即一维数组中的第一个元素通过索引 0 访问。随后,Layla 演示了如何使用 for 循环遍历数组。这种循环结构在编程中至关重要,因为它允许根据特定条件重复执行代码。

实现循环

接下来是循环,Layla 介绍了 for 循环及其三个基本组成部分:初始化器、条件和迭代器。 该循环用于根据数组的长度遍历数组元素。

for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(cheeses[i]);
}

在4:44时,她强调cheeses.Length给出数组中元素的数量,确保循环精确地遍历每个元素。 变量i作为索引变量,用于遍历索引。 这有效打印出各个数组元素,而无需多次编写Console.WriteLine方法如上所示,不需访问数组元素。 Layla 在 6:17 运行应用程序,显示此 for 循环的输出与前面的示例完全相同:

排序和可变性

Layla解释了排序的好处,然后在7:17时演示了使用Sort方法按字母顺序排列数组,提醒排序实际上会因为C#中数组的不变性而在后台创建一个新数组。 这是理解数据操作如何影响内存和性能的关键所在。

Array.Sort(cheeses);

她还展示了如何直接修改数组中的各个元素而无需创建新数组(8:10),从而在不可变性中体现了可变性。 要替换的元素的索引在cheeses数组变量后用方括号传递:

cheeses[0] = "Roquefort";

这将把数组中索引为 0 的元素"Brie"替换为新值"Roquefort"。

更新奶酪清单:处理新增条目(8:46)

Layla解释了如何向现有列表中添加值。这包括获取现有值和新值,创建一个包含这两个值的新数组,然后更新引用以指向这个新数组。 以下代码演示了它的工作原理:

var favouriteCheese = Console.ReadLine();

bool containsFavourite = false;

foreach (var cheese in cheeses)
{
    if (favouriteCheese == cheese)
    {
        containsFavourite = true;
    }
}

if (!containsFavourite)
{
    cheeses = cheeses.Append(favouriteCheese).ToArray();
}

此示例通过使用基本数组操作和System.Linq中将其追加到数组中。

Layla在13:50时提到代码出错因为IEnumerable,一个集合的接口。 为了解决此问题,我们使用cheeses。 Layla指出黄色波浪线是编译器警告,指示潜在问题,比如favouriteCheese为null,但在这个演示中我们忽略了安全检查。

更新和打印奶酪清单

莱拉解释说,一旦我们向数组中添加了一个新项,就应该将更新后的列表打印到屏幕上。 为实现此目的,我们使用for循环,打印每个元素及其索引,以显示该数组现在包含更多项目。

Console.WriteLine("The new list:");

for (var i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(i + " " + cheeses[i]);
}

Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");

这展示了 C# 中数组的动态特性,演示了如何添加新元素以及如何通过打印数组内容来验证更新。

然后莱拉运行应用程序来显示新添加的奶酪(15:19):

利用对象数组进行增强

为了加深理解,Layla通过创建具有Cheese类来介绍对象数组 (16:14)。 然后她替换字符串列表来创建一个Cheese对象的数组,并演示如何在迭代过程中访问对象内的属性 (17:46)。

class Cheese
{
    public string Name { get; set; }
    public int Strength { get; set; }

    public Cheese(string name, int strength)
    {
        Name = name;
        Strength = strength;
    }
}

Cheese[] cheeses = new Cheese[]
{
    new Cheese("Stilton", 3),
    new Cheese("Cheddar", 2),
    new Cheese("Pineapple", 1),
    new Cheese("Brie", 2)
};

cheeses[0] = new Cheese("Roquefort", 4);

本部分将介绍数组如何封装复杂的数据结构,从而为编程提供灵活性和强大的功能。

在循环中使用奶酪对象

Layla 现在演示如何将更新后的列表的所有元素打印到屏幕上。 在这种情况下,每个奶酪表示为具有Strength属性的对象。 Cheese对象的数组,其中每次迭代直接处理一个数组元素。

for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine($"{cheeses[i].Name}, Strength: {cheeses[i].Strength}");
}

此循环简化了访问存储在Cheese对象的属性。 莱拉于20:34运行了该程序,输出结果如下:

结论

总之, Layla Porter 的C# 数组和循环教程为初学者理解这些基本概念奠定了坚实的基础。通过掌握数组和各种循环结构,有志成为 C# 开发人员的人可以有效地操作数据结构,并在程序中遍历集合。 理解这些基本原理对于构建更复杂的应用程序和探索 C# 编程的更多方面至关重要。

通过学习 Layla 的示例和解释,初学者可以更有信心在自己的 C# 项目中有效地使用数组和循环。 对于 C# 集合以及高级二维数组和锯齿数组的更深入讲解,我们鼓励学习者探索后续教程和实践练习。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户