练习 - 开始了解数组基本知识

已完成

数组可用于将同一类型的多个值存储在单个变量中。 数组中存储的值通常相关。 例如,学生姓名列表可以存储在名为 students 的字符串数组中。

你在安全部门的工作重点是查找欺诈性订单的模式。 你希望代码查看过去的客户订单,并识别与欺诈性订单关联的标记。 你的公司希望这些标记可用于在处理之前先识别将来潜在的欺诈性采购订单。 由于无法提前知道需要查看多少订单,所以无法创建单个变量来保存每个订单 ID。 如何创建数据结构来保存多个相关值?

在本练习中,你将使用数组来存储和分析一系列订单 ID。

什么是数组?

数组是可通过单个变量名称进行访问的一系列单个数据元素。 使用从零开始的数字索引访问数组中的每个元素。 如你所见,通过数组能够收集相似的数据(这些数据在单个数据结构中共享共同用途或特征),以便于进行处理。

声明数组和访问数组元素

数组是一种特殊类型的变量,可以保存同一数据类型的多个值。 因为必须同时指定数组的数据类型和大小,所以声明语法略有不同。

准备编码环境

本模块包括指导你完成生成和运行示例代码的过程的活动。 建议使用 Visual Studio Code 作为开发环境来完成这些活动。 使用 Visual Studio Code 来完成这些活动可帮助你在由全球专业人员使用的开发人员环境中更舒适地编写和运行代码。

  1. 打开 Visual Studio Code。

    可以使用 Windows“开始”菜单(或等效资源 [对于其他 OS])打开 Visual Studio Code。

  2. 在 Visual Studio Code 的“文件”菜单上,选择“打开文件夹”。

  3. 在“打开文件夹”对话框中,导航到 Windows“桌面”文件夹。

    如果使用了其他文件夹位置来保存代码项目,可以改用该文件夹位置。 对于此训练,重要的是要有一个容易找到和记住的位置。

  4. 在“打开文件夹”对话框中,选择“选择文件夹”。

    如果看到一个询问是否信任作者的安全对话框,请选择“是”。

  5. 在 Visual Studio Code 的“终端”菜单上,选择“新终端”。

    请注意,“终端”面板中的命令提示符显示当前文件夹的文件夹路径。 例如:

    C:\Users\someuser\Desktop>
    

    注意

    如果你在自己的电脑上工作,而不是在沙盒或托管环境中工作,并且你已经完成此 C# 系列中的其他 Microsoft Learn 模块,那么你可能已经为代码示例创建了一个项目文件夹。 如果是这种情况,可以跳过下一步,该步骤用于在 TestProject 文件夹中创建控制台应用。

  6. 在终端命令提示符处,若要在指定文件夹中新建控制台应用程序,请键入 dotnet new console -o ./CsharpProjects/TestProject,然后按 Enter。

    此 .NET CLI 命令使用 .NET 程序模板在指定文件夹位置创建新的 C# 控制台应用程序项目。 该命令会为你创建 CsharpProjects 和 TestProject 文件夹,并使用 TestProject 作为 .csproj 文件的名称。

  7. 在“资源管理器”面板中,展开“CsharpProjects”文件夹。

    你应会看到 TestProject 文件夹和两个文件,一个名为 Program.cs 的 C# 程序文件和一个名为 TestProject.csproj 的 C# 项目文件。

  8. 在“资源管理器”面板中,若要在“编辑器”面板中查看代码文件,请选择“Program.cs”。

  9. 删除现有代码行。

    在本模块中,可以使用此 C# 控制台项目来创建、生成和运行代码示例。

  10. 关闭“终端”面板。

声明新数组

  1. 若要声明可以保存三个元素的新字符串数组,请输入以下代码:

    string[] fraudulentOrderIDs = new string[3];
    
  2. 请花点时间检查代码。

    new 运算符在可容纳三个字符串值的计算机内存中创建数组的新实例。 有关 new 关键字的详细信息,请参阅模块“使用 C# 从 .NET 类库调用方法”。

    请注意,第一组方括号 [] 只是告知编译器,名为 fraudulentOrderIDs 的变量是数组,而第二组方括号 [3] 指示数组可以保存的元素数目。

    注意

    此示例演示如何声明一个字符串数组,但可以创建每个数据类型的数组,其中包括基元(如 intbool)以及更复杂的数据类型(如类)。 此示例使用字符串的简单性来最大程度地减少在入门时需要掌握的新想法数量。

为数组的元素赋值

此时,你已声明了一个字符串数组,但该数组的每个元素都为空。 若要访问数组的元素,请使用方括号内从零开始的数字索引。 像常规变量一样,可以使用 = 为数组元素赋值。

  1. 若要将订单 ID 值分配给 fraudulentOrderIDs 数组,请更新代码,如下所示:

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    
  2. 请花点时间检查代码。

    请注意,你正在使用数组的名称来访问数组元素。 通过在方括号内指定从零开始的索引号,可以单独访问每个元素。

    由于数组声明为字符串,因此分配的值也必须是字符串。 在此方案中,你要将订单 ID 分配给数组的元素。

尝试使用超出数组边界的索引

可能一开始看起来并不直观,但请务必记住,你要声明的是数组中元素的计数。 但是,你从零开始访问数组中的每个元素。 因此,若要访问数组中的第二个项,请使用索引 1

初学者可能会忘记数组是从零开始的,所以他们会尝试访问不存在的数组元素。 如果犯了此错误,则会出现运行时异常的情况,通知你曾尝试访问数组边界之外的元素。

若要有意“中断”应用程序,请尝试使用索引值 3 来访问数组的第四个元素。

  1. 在代码文件的底部,输入以下代码行:

    fraudulentOrderIDs[3] = "D000";
    
  2. 确保代码与以下示例匹配:

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    fraudulentOrderIDs[3] = "D000";
    
  3. 在 Visual Studio Code 的“文件”菜单上,选择“保存”。

  4. 在“资源管理器”面板中,若要在 TestProject 文件夹位置打开终端,请右键单击“TestProject”,然后选择“在集成终端中打开”。

    终端面板应该打开,并且应该包含一个命令提示符,它显示终端已打开转到 TestProject 文件夹位置。

  5. 在终端命令提示符处,若要编译代码,请键入 dotnet build,然后按 Enter。

    你应看到以下消息:

    Build succeeded.        
        0 Warning(s)        
        0 Error(s)
    
  6. 在终端命令提示符处,若要运行代码,请键入 dotnet run,然后按 Enter。

    运行应用时,会收到以下运行时错误消息:

    Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.     
       at Program.<Main>$(String[] args) in C:\Users\someuser\Desktop\CsharpProjects\TestProject\Program.cs:line 6
    

    请注意错误的以下部分:

    • 错误消息:System.IndexOutOfRangeException: Index was outside the bounds of the array.
    • 错误位置:Program.cs:line 6
  7. 注释禁止生成运行时错误的行。

    // fraudulentOrderIDs[3] = "D000";
    

你已了解如何为数组元素赋值。 现在,请看如何访问存储在数组元素中的值。

从数组的元素中检索值

访问数组元素的值的方式与为数组元素赋值的方式相同。 只需指定要检索其值的元素的索引。

  1. 若要编写每个欺诈性订单 ID 的值,请更新代码,如下所示:

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
  2. 在 Visual Studio Code 的“文件”菜单上,选择“保存”。

  3. 在“资源管理器”面板中,若要在 TestProject 文件夹位置打开终端,请右键单击“TestProject”,然后选择“在集成终端中打开”。

  4. 在终端命令提示符处,键入 dotnet run,然后按 Enter。

    你应看到以下消息:

    First: A123
    Second: B456
    Third: C789
    

重新分配数组的值

数组的元素与任何其他变量值一样。 可以为数组的每个元素分配、检索和重新分配值。

  1. 在代码文件的末尾,输入以下代码以重新分配并打印第一个数组元素的值:

    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
  2. 确保代码与以下示例匹配:

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
  3. 在 Visual Studio Code 的“文件”菜单上,选择“保存”。

  4. 在“资源管理器”面板中,若要在 TestProject 文件夹位置打开终端,请右键单击“TestProject”,然后选择“在集成终端中打开”。

  5. 在终端命令提示符处,键入 dotnet run,然后按 Enter。

    你应看到以下消息:

    First: A123
    Second: B456
    Third: C789
    Reassign First: F000
    

初始化数组

可以在声明期间初始化数组,就像初始化常规变量一样。 但是,若要初始化数组的元素,请使用具有大括号的特殊语法。

  1. 注释禁止声明 fraudulentOrderIDs 变量的行。

    可以使用多行注释 (/* ... */) 注释禁止 fraudulentOrderIDs 的声明以及用于向数组元素赋值的行。

  2. 若要在单个语句中声明数组初始化值,请输入以下代码:

    string[] fraudulentOrderIDs = { "A123", "B456", "C789" };
    
  3. 确保代码与以下示例匹配:

    /*
    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    */
    
    string[] fraudulentOrderIDs = { "A123", "B456", "C789" };
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
  4. 请花点时间检查声明语句。

    请注意,此语法既紧凑又易于阅读。 运行应用程序时,输出应不会发生更改。

  5. 在 Visual Studio Code 的“文件”菜单上,选择“保存”。

  6. 在“资源管理器”面板中,若要在 TestProject 文件夹位置打开终端,请右键单击“TestProject”,然后选择“在集成终端中打开”。

  7. 在终端命令提示符处,键入 dotnet run,然后按 Enter。

    应能看到与之前一样的消息:

    First: A123
    Second: B456
    Third: C789
    Reassign First: F000
    

使用数组的 Length 属性

根据数组的创建方式,你可能无法提前知道一个数组包含多少元素。 若要确定数组的大小,可使用 Length 属性。

注意

数组的 Length 属性不是从零开始的。

  1. 在代码文件的末尾,输入以下代码以报告欺诈性订单的数量:

    Console.WriteLine($"There are {fraudulentOrderIDs.Length} fraudulent orders to process.");
    

    此代码使用数组的 Length 属性(整数)返回 fraudulentOrderIDs 数组中的元素数目。

  2. 确保代码与以下示例匹配:

    /*
    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    */
    
    string[] fraudulentOrderIDs = { "A123", "B456", "C789" };
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
    Console.WriteLine($"There are {fraudulentOrderIDs.Length} fraudulent orders to process.");
    
  3. 保存对 Program.cs 文件的更改,然后运行应用程序。

    应会看到以下输出:

    First: A123
    Second: B456
    Third: C789
    Reassign First: F000
    There are 3 fraudulent orders to process.
    

概括

使用数组时,应谨记以下重要事项:

  • 数组是一种特殊的变量,用于保存一系列相关的数据元素。
  • 应记住数组变量声明的基本格式。
  • 访问数组的每个元素,使用方括号内从零开始的索引来设置或获取其值。
  • 如果尝试访问数组边界之外的索引,则会出现运行时异常。
  • Length 属性采用编程方式来确定数组中的元素编号。

知识检测

1.

什么是数组?

2.

以下哪一项是创建数组并将其初始化的正确示例?