Итерация через 2-мерный массив С#

for(int k=0;k <= odds.GetLength(-1);k++)

Вышеприведенная строка кода предназначена для итерации через двумерный массив типа Double, но продолжает бросать следующее исключение. Исключить из диапазона исключения. Кто-нибудь будет достаточно любезен, чтобы объяснить, почему и предоставить решение. Большое спасибо.

Ответ 1

Вы передаете недопустимый индекс GetLength. Размеры многомерного массива основаны на 0, поэтому -1 недопустим, и использование отрицательного числа (или числа, превышающего число измерений - 1) приведет к IndexOutOfRangeException.

Это зациклится на первом измерении:

for (int k = 0; k < odds.GetLength(0); k++)

Вам нужно добавить еще один цикл, чтобы пройти второе измерение:

for (int k = 0; k < odds.GetLength(0); k++)
    for (int l = 0; l < odds.GetLength(1); l++)
        var val = odds[k, l];

Ответ 2

Ну, обычно, когда вы хотите итерации по 2D-массиву:

for(int col = 0; col < arr.GetLength(0); col++)
    for(int i = row; row < arr.GetLength(1); row++)
        arr[col,row] =  /*something*/;

Массивы всегда основаны на нуле, поэтому нет смысла пытаться получить что-то в -1.

Ответ 3

Если odds является двумерным массивом, его размеры будут называться 0 и 1. Попытка получить доступ к размеру -1 приведет к IndexOutOfRangeException.

Ответ 4

string[,] arr = new string[2, 3];
        arr[0, 0] = "0,0";
        arr[0, 1] = "0,1";
        arr[0, 2] = "0,2";

        arr[1, 0] = "1,0";
        arr[1, 1] = "1,1";
        arr[1, 2] = "1,2";

        for (int i = 0; i < arr.GetLength(0); i++)
        {
            for (int j = 0; j < arr.GetLength(1); j++)
            {
                Response.Write(string.Format("{0}\t", arr[i, j]));
            }
            Response.Write("<br/>");
        }

Ответ 5

GetLength основан на нуле. Попробуйте позвонить GetLength(0).

Ответ 6

Я вижу одну или две проблемы в зависимости от того, как вы собираетесь ее использовать:

Во-первых, GetLength (ind dimension) возвращает длину указанного измерения, начиная с 0. В случае двумерного массива правильные индексы будут равны 0 и 1.

Вторая проблема заключается в том, что вы делаете <= вместо < для условия цикла, которое также может выйти за границы, поскольку последний индекс имеет длину-1, а не длину.

StriplingWarrior и Gilad Naaman опубликовали примеры кода, поэтому я пропущу это.