使用Length属性搜索二维数组

时间:2017-04-16 22:20:15

标签: c# arrays loops search multidimensional-array

好的,我尝试使用Length属性搜索二维数组(我必须使用它,否则我只使用GetLength())。此数组随机填充一组行数和列数。它将询问用户要搜索的数字,然后它将搜索数组并返回true或false并返回行和列的索引(如果找到该数字)。

我对我为完成for循环设置而进行的研究中的代码非常有信心,但目前我收到的错误表明"错误的索引数量里面[];预计2"当我尝试搜索数组的列时。

我已经看到了这个错误,而且我发现这应该是正确的设置。所以,我不确定我的问题在这个循环中的位置,有人可以看看让我知道我错过了哪一步吗?

谢谢!

int [,] math;
math = new int[3, 5]; //So you can see my array that is declared in main

static bool SearchArray(int search, int [,] array, out int row, out int coln)
    {
        row = -1;
        coln = -1;
        // search parameter is given from another method where it asks the user for a number to search for in the array.

        for (int x = 0; x < array.Length; x++)
        {
            for (int y = 0; y < array[x].Length; y++) //error is here with the array[x] and continues to any reference I try to make similarly.
            {
                if (array[x][y] == search)
                {
                    row = array[x];
                    coln = array[y];
                    return true;
                }
            }
        }
        return false

2 个答案:

答案 0 :(得分:1)

有关多维数组(正如您在此处使用)和锯齿状数组(数组数组)之间差异的详细信息,请参阅this question

如果你声明一个多维数组:

int [,] math = new int[3, 5];

您必须像这样访问其中的值:

int value = math[1,2];

如果声明一个锯齿状数组,如下所示:

int[][] math = new int[3][];
math[0] = new int[5];
math[1] = new int[5];
math[2] = new int[5];

(虽然子阵列的大小通常会有所不同 - 因此呈锯齿状。) 然后您可以访问值:

int value = math[1][2];

对于您的特定问题,如果使用多维数组,您还需要使用'Array.GetLength',如:

for (int x = 0; x < array.GetLength(0); x++)

获取零件的各个尺寸(如this question中所示)。在您的示例中,“。Length”为您提供了数组的大小,而不是第一维的长度。

答案 1 :(得分:0)

您正在混合具有多维的锯齿状数组,实际上是二维数组。两个昏暗的解决方案。数组将是这样的:

static bool SearchArray(int search, int [,] array, out int row, out int coln) 
{ 
    row = -1; 
    coln = -1;
    for (int x = 0; x < array.GetLength(0); x++)
    { 
        for (int y = 0; y < array.GetLength(1); y++)
        { 
            if (array[x,y] == search) 
            { 
                row = x; 
                coln = y; 
                return true; 
            } 
        } 
    } 
    return false
}