循环访问二维数组 c#
本文关键字:二维数组 访问 循环 | 更新日期: 2023-09-27 18:15:01
for(int k=0;k <= odds.GetLength(-1);k++)
上面的代码行应该遍历 Double 类型的二维数组,但不断抛出以下异常。索引超出范围异常。有人会好心地解释原因并提供解决方案吗?非常感谢。
您正在将无效的索引传递给 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];
嗯,通常当你想迭代一个2D数组时:
for(int col = 0; col < arr.GetLength(0); col++)
for(int row = 0; 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("<br/>");
}
如果odds
是一个二维数组,那么它的维度将被称为0
和1
。尝试访问维度-1
将产生IndexOutOfRangeException
。
GetLength
从零开始。尝试拨打GetLength(0)
。
我看到一两个问题,具体取决于您打算如何使用它:
首先,GetLength(ind dimension( 返回指定维度的长度,从 0 开始。对于二维数组,正确的索引将是 0 和 1。
第二个问题是你正在执行 <= 而不是
StriplingWarrior 和 Gilad Naaman 发布了代码示例,所以我会跳过它。
我遵循了接受的答案,但它在我的代码中抛出了异常。
这是我使用 2 foreach 循环迭代 2 维数组的方法。我为谁关心。
int i = 0;
foreach (var innercell in cells)
{
int j = 0;
foreach (var item in innercell)
{
if (j == cell.Col && cell.Row == i)
{
item.TagName = cell.TagName;
item.Text = cell.Text;
exist = true;
break;
}
j++;
}
i++;
}
以下代码将循环访问名为 arr 的二维数组,并计算其所有元素的总和。
int sum =0;
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < (arr[i]).Length; j++)
{
sum+=(arr[i][j]);
}
}