迭代2维数组c#

时间:2011-11-18 14:52:40

标签: c# arrays

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

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

7 个答案:

答案 0 :(得分:49)

您正在将无效索引传递给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];

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:4)

如果odds是二维数组,则其维度将称为01。尝试访问维度-1将产生IndexOutOfRangeException

答案 3 :(得分: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 :(得分:2)

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

答案 5 :(得分:1)

我看到一两个问题取决于你打算如何使用它:

首先,GetLength(ind维度)返回指定维度的长度,从0开始。对于二维数组,正确的索引将为0和1.

第二个问题是你正在做&lt; =而不是&lt; for循环条件,由于最后一个索引的长度为1而不是长度,因此也可能超出范围。

StriplingWarrior和Gilad Naaman发布了代码示例,所以我会跳过它。

答案 6 :(得分:1)

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

这是我使用2 foreach循环迭代2维数组的方式。 我与关心的人分享。

public function create(Request $request){
        $user_id = Auth::user()->id;
        $statement = DB::select("SHOW TABLE STATUS LIKE 'items'");
        $nextId = $statement[0]->Auto_increment;
        $image = $request->file('item_image');
        $fileName = "item_image_".$nextId.".".$image->getClientOriginalExtension();
        $path  = $request->file('item_image')->move('storage/image/',$fileName);
        $imagepath = 'storage/image/'.$fileName;

       $item = Item::create([
            'user_id' => $user_id,
            'image_url' => $imagepath,
            'item_name' => $request->item_name,
            'item_description' => $request->item_desc,
        ]);


       return response()->json($item,201);
    }