迭代2维数组c#

use*_*689 25 c# arrays

for(int k=0;k <= odds.GetLength(-1);k++)
Run Code Online (Sandbox Code Playgroud)

上面的代码行应该迭代一个Double类型的二维数组,但不断抛出以下异常.索引超出范围异常.有人会善意解释原因并提供解决方案.非常感谢.

Ode*_*ded 52

您正在传递无效索引GetLength.多维数组的维度是0基于的,因此-1无效并且使用负数(或大于维数的数字 - 1)将导致IndexOutOfRangeException.

这将循环第一维:

for (int k = 0; k < odds.GetLength(0); k++)
Run Code Online (Sandbox Code Playgroud)

您需要添加另一个循环来完成第二个维度:

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

  • @John - 谢谢.你可以建议直接编辑:) (2认同)

Gil*_*man 7

好吧,通常当你想迭代2D数组时:

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

数组总是从零开始,因此没有必要尝试在-1索引处获得某些东西.


小智 6

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/>");
        }
Run Code Online (Sandbox Code Playgroud)


Dav*_*und 5

如果odds是一个二维数组,那么它的维数将被称为01。尝试访问维度-1将产生一个IndexOutOfRangeException.