这个嵌套循环如何输出一个分为 3 个部分的列表,每个部分有 3 个单词?

How does this nested loop output a list separated into 3 sections with 3 words in each section?

我是 C# 的新手。我很好奇这段代码如何用数组中的 3 个单词打印出 3 个单独的行。有人可以解释它是如何工作的吗?

using System;

namespace MyFirstProgram
{
    class Program 
    {
        static void Main(string[] args)
        {

            String[,] parkingLot = {{ "Mustang", "F-150", "Explorer" }, { "Corvette", "Camaro", "Silverado" }, { "Corolla", "Camry", "Rav4" }};

            for(int i = 0; i < parkingLot.GetLength(0); i++)
            {
                for (int j = 0; j < parkingLot.GetLength(1); j++)
                {
                    Console.Write(parkingLot[i, j] + " ");
                }
                Console.WriteLine();
            }

            Console.ReadKey();
        }
    }
}```

GetLength()方法returns传入维度的大小:

Gets a 32-bit integer that represents the number of elements in the specified dimension of the Array.

注意第一个调用传递了一个零:

parkingLot.GetLength(0)

这returns二维数组中的行数。

第二次调用传递一个:

parkingLot.GetLength(1)

它告诉您二维数组中的列数。

也许这个例子能更好地说明这个概念:

String[,] parkingLot = {
  { "a", "b", "c" },
  { "1", "2", "3" },
  { "red", "green", "blue" },
  { "cat", "dog", "fish"},
  { "A1", "B2", "C3"}
};

for(int row = 0; row < parkingLot.GetLength(0); row++) // 5 rows
{
  for (int col = 0; col < parkingLot.GetLength(1); col++) // 3 columns
  {
    Console.Write(parkingLot[row, col] + " ");
  }
  Console.WriteLine();
}

输出:

a b c 
1 2 3 
red green blue 
cat dog fish 
A1 B2 C3 

我将把它分解成每一行代码,并解释它的作用。

String[,] parkingLot = { { "Mustang", "F-150", "Explorer" }, { "Corvette", "Camaro", "Silverado" }, { "Corolla", "Camry", "Rav4" } };

parkingLot 是一个 multi-dimensional 字符串数组。这意味着这是一个字符串数组,其中包含其他字符串类型的数组。想想更大的 {} 中的每个 {} 都有自己的可以访问的 Array 对象。

for (int i = 0; i < parkingLot.GetLength(0); i++)

For 循环旨在循环指定数量的元素。在开头创建的整数“i”表示循环将从索引 0 开始。我们从 0 开始,因为数组索引从 0 开始。

此循环的持续时间与初始化数组中数组 ({}) 的数量一样长。本例中,因为parkingLot包含3个数组,所以长度为3。

for (int j = 0; j < parkingLot.GetLength(1); j++)

这部分代码在其上方的 for-loop 中迭代,并迭代单个数组中的每个元素。代码的“GetLength(1)”部分获取整个数组中单个数组实例的长度。例如:这个 multi-dimensions 数组中的第一个数组实例包含 { "Mustang", "F-150", "Explorer" },是 3 个字符串。因此,长度也将是 3.

Console.Write(parkingLot[i, j] + " ");

在这里,我们可以看到有对 i 和 j 的引用。让我逐步向您展示会发生什么:

当 i=0 时,代码开始迭代另一个循环,在移动到 i = 1 之前必须计算 j = 0、j = 1 和 j = 2。这意味着它必须读取数组中的每个元素在移动到下一个数组之前。

例如:说:

  • i = 0,j = 0。这将访问“Mustang”
  • i = 1,j = 2 将访问“Silverado”
  • i = 2 和 j = 1 将访问“Camry”
Console.WriteLine();

在 j 循环中写入每个元素后,这段代码将响应写入控制台。这就是为什么数组的每个元素都出现在一行上的原因。

Console.ReadKey();

按下此键后,程序关闭。

我建议您尝试使用变量并创建您自己的数组和 multi-dimensional 数组。这样你就可以看到他们是如何运作的,以及他们不喜欢你和他们一起做什么。