使用嵌套的Foreach语句迭代多维数组

Tyl*_*rry 72 c# foreach nested-loops

我认为这可能是一个非常简单的问题,但我还没有弄清楚.如果我有一个像这样的二维数组:

int[,] array = new int[2,3] { {1, 2, 3}, {4, 5, 6} };
Run Code Online (Sandbox Code Playgroud)

使用嵌套的foreach语句迭代数组的每个维度的最佳方法是什么?

ICR*_*ICR 121

如果你想迭代数组中的每个项目,就好像它是一个扁平数组,你可以这样做:

foreach (int i in array) {
    Console.Write(i);
}
Run Code Online (Sandbox Code Playgroud)

哪个会打印

123456

如果您希望能够知道x和y索引,则需要执行以下操作:

for (int x = 0; x < array.GetLength(0); x += 1) {
    for (int y = 0; y < array.GetLength(1); y += 1) {
        Console.Write(array[x, y]);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用锯齿状数组(数组数组):

int[][] array = new int[2][] { new int[3] {1, 2, 3}, new int[3] {4, 5, 6} };
foreach (int[] subArray in array) {
    foreach (int i in subArray) {
        Console.Write(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

int[][] array = new int[2][] { new int[3] {1, 2, 3}, new int[3] {4, 5, 6} };
for (int j = 0; j < array.Length; j += 1) {
    for (int k = 0; k < array[j].Length; k += 1) {
        Console.Write(array[j][k]);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在看到我的方法错误后(例如,尝试使用像锯齿状数组这样的二维数组),我同意遍历该列表的最佳方法就像您在第一个示例中所拥有的那样。您获得投票是因为您愿意超越答案并提供其他选择。 (2认同)

Dan*_*ted 20

以下是如何访问二维数组中的每个元素.这是你在找什么?

for (int i=0;i<array.GetLength(0);i++)
{
    for (int j=0;j<array.GetLength(1);j++)
    {
        int cell = array[i,j];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我希望有一个 **foreach** 实现,如果可能的话? (2认同)

pol*_*nts 5

对于多维数组,可以使用相同的方法遍历元素,例如:

int[,] numbers2D = new int[3, 2] { { 9, 99 }, { 3, 33 }, { 5, 55 } };
foreach (int i in numbers2D)
{
    System.Console.Write("{0} ", i);
}
Run Code Online (Sandbox Code Playgroud)

该示例的输出为:

9 99 3 33 5 55
Run Code Online (Sandbox Code Playgroud)

参考文献


在Java中,多维数组是数组的数组,因此可以进行以下工作:

    int[][] table = {
            { 1, 2, 3 },
            { 4, 5, 6 },
    };
    for (int[] row : table) {
        for (int el : row) {
            System.out.println(el);
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • C#具有多维数组和锯齿状数组作为单独的概念,其中“ int [,]”是二维数组,而“ int [] []”是数组的锯齿状数组,并且每个给定的数组都不必具有相同的长度。您可以轻松地在锯齿状数组上执行foreach,但是2D数组的结构类型不同。无论如何,您的第二个片段不适合*这个*问题,第一个片段没有嵌套。 (3认同)

Kev*_*n M 5

我知道这是一篇旧文章,但我通过谷歌找到了它,在玩过之后我认为我有一个更简单的解决方案。如果我错了,请指出,因为我想知道,但这至少对我的目的有用(它基于 ICR 的回复):

for (int x = 0; x < array.GetLength(0); x++)
{
    Console.Write(array[x, 0], array[x,1], array[x,2]);
}
Run Code Online (Sandbox Code Playgroud)

由于两个维度都是有限的,因此任一维度都可以是简单的数字,从而避免嵌套 for 循环。我承认我是 C# 新手,所以请,如果有理由不这样做,请告诉我......