Выполните итерации многомерного массива с вложенным оператором Foreach

Я думаю, что это могло бы быть довольно простым вопросом, но я не смог понять это все же. Если у меня есть 2-мерный массив как так:

int[,] array = new int[2,3] { {1, 2, 3}, {4, 5, 6} };

Чего лучший способ состоит в том, чтобы выполнить итерации через каждый размер массива с вложенным foreach оператором?

72
задан phil13131 12 September 2013 в 12:01
поделиться

5 ответов

Если вы хотите перебирать каждый элемент массива, как если бы это был сплющенный массив, вы можете просто сделать:

foreach (int i in array) {
    Console.Write(i);
}

что выведет

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]);
    }
}

В качестве альтернативы можно использовать рваный массив (массив массивов):

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);
    }
}

или

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]);
    }
}
121
ответ дан 24 November 2019 в 12:36
поделиться

Два способа:

  1. Определить массив как зубчатый и использовать вложенные foreach.
  2. Определите массив обычным образом и используйте foreach для всего объекта.

Пример №2:

 int [,] arr = {{1, 2}, {3, 4}};
foreach (int a в arr)
Console.Write (a);

Вывод будет 1234. т.е. точно так же, как выполнение i от 0 до n и j от 0 до n.

2
ответ дан 24 November 2019 в 12:36
поделиться

Вот как можно посетить каждый элемент в двумерном массиве. Это то, что вы искали?

for (int i=0;i<array.GetLength(0);i++)
{
    for (int j=0;j<array.GetLength(1);j++)
    {
        int cell = array[i,j];
    }
}
20
ответ дан 24 November 2019 в 12:36
поделиться

С многомерными массивами вы можете использовать тот же метод для перебора элементов, например:

 int [,] numbers2D = new int [3, 2] {{9, 99}, {3, 33}, {5, 55}};
foreach (int i в числах 2D)
{
System.Console.Write ("{0}", я);
}

Вывод этого примера:

 9 99 3 33 5 55

Ссылки


В Java многомерные массивы представляют собой массивы массивов, поэтому работает следующее:

    int[][] table = {
            { 1, 2, 3 },
            { 4, 5, 6 },
    };
    for (int[] row : table) {
        for (int el : row) {
            System.out.println(el);
        }
    }
5
ответ дан 24 November 2019 в 12:36
поделиться

Двумерный массив в C# не очень хорошо поддается вложенному foreach, он не является эквивалентом зубчатого массива (массива массивов). Вы можете сделать что-то вроде этого, чтобы использовать foreach

foreach (int i in Enumerable.Range(0, array.GetLength(0)))
    foreach (int j in Enumerable.Range(0, array.GetLength(1)))
        Console.WriteLine(array[i, j]);

Но вы все равно будете использовать i и j как значения индексов для массива. Читабельность была бы лучше сохранена, если бы вместо этого вы просто использовали цикл for.

3
ответ дан 24 November 2019 в 12:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: