迭代2维数组c#
for(int k=0;k <= odds.GetLength(-1);k++)
上面的代码行应该迭代Double类型的二维数组,但不断抛出以下exception。 索引超出范围exception。 有人会善意解释原因并提供解决方案。 非常感谢。
您正在将无效索引传递给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];
如果odds
是二维数组,则其维度将被称为0
和1
。 尝试访问维度-1
将产生IndexOutOfRangeException
。
好吧,通常当你想迭代2D数组时:
for(int col = 0; col < arr.GetLength(0); col++) for(int i = row; row < arr.GetLength(1); row++) arr[col,row] = /*something*/;
数组总是从零开始,因此没有必要尝试在-1索引处获得某些东西。
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("
"); }
GetLength
从零开始。 尝试调用GetLength(0)
。
我看到一两个问题取决于你打算如何使用它:
首先,GetLength(ind dimension)返回指定维度的长度,从0开始。对于二维数组,正确的索引将为0和1。
第二个问题是你正在做<=而不是 StriplingWarrior和Gilad Naaman发布了代码示例,所以我会跳过它。