循环访问二维数组 c#

本文关键字:二维数组 访问 循环 | 更新日期: 2023-09-27 18:15:01

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

上面的代码行应该遍历 Double 类型的二维数组,但不断抛出以下异常。索引超出范围异常。有人会好心地解释原因并提供解决方案吗?非常感谢。

循环访问二维数组 c#

您正在将无效的索引传递给 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是一个二维数组,那么它的维度将被称为01。尝试访问维度-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]);
        }
     }