【问题标题】:Iterate through 2 dimensional array c#遍历二维数组c#
【发布时间】:2011-11-18 14:52:40
【问题描述】:
for(int k=0;k <= odds.GetLength(-1);k++)

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

【问题讨论】:

  • 您是否在循环中的任何时候更改“赔率”的内容?
  • 是 'code'win += odds[ 1,k]*unitStake; '代码'

标签: c# arrays


【解决方案1】:

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

这将遍历 first 维度:

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];

【讨论】:

  • 循环的条件部分应指定 '
  • @John - 谢谢。不过,您本可以建议直接编辑 :)
【解决方案2】:

嗯,通常当你想迭代一个二维数组时:

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

数组总是从零开始的,所以没有必要尝试在 -1 索引处获取东西。

【讨论】:

    【解决方案3】:
    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/>");
            }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        GetLength 从零开始。尝试拨打GetLength(0)

        【讨论】:

          【解决方案6】:

          我发现一两个问题取决于您打算如何使用它:

          首先,GetLength(ind dimension) 返回指定维度的长度,从 0 开始。如果是二维数组,正确的索引应该是 0 和 1。

          第二个问题是您正在执行

          StriplingWarrior 和 Gilad Naaman 发布了代码示例,因此我将跳过。

          【讨论】:

            【解决方案7】:

            我遵循了接受的答案,但它在我的代码中引发了异常。

            这是我使用 2 个 foreach 循环迭代二维数组的方法。 我为谁担心。

            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++;
            }
            

            【讨论】:

            • 在尝试GetLength(1) 时,我还向我抛出了一个关于“越界”的错误。事实证明,如果 2D 数组是 jagged 数组,这将不起作用。如果是这种情况,您可以使用my2dArray[0].Length,假设没有具有不同列数的数组。
            猜你喜欢
            • 1970-01-01
            • 2016-09-04
            • 2013-03-14
            • 1970-01-01
            • 2014-12-22
            相关资源
            最近更新 更多