在(2D)数组的END上开始数组搜索

时间:2018-11-29 10:11:23

标签: c# arrays

我想在数组的结尾而不是开头开始搜索数组中的int。我该怎么做?

请记住,这是一个2D数组。

编辑有人问我如何从头开始搜索:

在我的代码文件中,我从8x8打印一个矩阵,显示随机数(1-10)。用户在矩阵中提供一个要搜索的数字,然后代码返回找到该数字的位置:

Position position = new Position();

    Position LookForNumber(int[,] matrix, int findNumber)
    {
        for (int r = 0; r < matrix.GetLength(0); r++)
        {
            for (int c = 0; c < matrix.GetLength(1); c++)
            {
                if (matrix[r, c] == findNumber)
                {
                    Console.WriteLine("Your number {0} first appears on position {1},{2}", findNumber, r, c);
                    position.row = r;
                    position.column = c;
                    return position;
                }
            }
        }
        return position;
    }

现在,我想查找用户放弃的号码的最后一个位置。

2 个答案:

答案 0 :(得分:3)

要搜索2D数组,您需要2个循环,但是您可以按显示顺序进行循环:

    Position LookForNumber(int[,] matrix, int findNumber)
    {
        Position position = new Position();
        for (int r = matrix.GetLength(0) - 1; r >= 0 ; r--)
        {
            for (int c = matrix.GetLength(1) - 1; c >= 0 ; c--)
            {
                if (matrix[r, c] == findNumber)
                {
                    Console.WriteLine("Your number {0} first appears on position 
              {1},{2}", findNumber, r, c);
                    position.row = r;
                    position.column = c;
                    return position;
                }
            }
        }
        return null;
    }

答案 1 :(得分:2)

数组是2D事实与您的问题无关。

看看最常规的基本循环是如何工作的?

for (int i = 0; i < array.length ; i++)
{
...
}

如果您必须将代码翻译成英语,那么您实际上就是在这样做

对于所有元素,从 0 开始分配 i ,直到我们到达 array.length adding 1 to i between each iteration ,请执行以下操作 (...)

因此,您真正要做的就是更改循环的参数。

例如,您可以说起点(即i)可以不是0。如果要从数组的末尾开始,用什么代替零呢?

然后,如果您从头开始,是否真的可以在每次迭代之间将值添加到i?并非如此,您会越界,那么您应该怎么做而不是i++

到那时,如果要从头到尾进行迭代,则需要一个停止点。答案就出在问题上:我的出发点是数组的开始。因此,循环的中间参数(这是停止点)应该代表数组的开始。你怎么写下来?

请注意,例如,现在您可以在了解逻辑之后再遍历第二个元素。

事实上,您处于2D循环中仅意味着您在主循环中需要一个内部循环,其工作方式与外部循环相同。只需将索引想象为具有坐标的画布,而不是仅包含点的线即可。

如果您听不懂我的意思,我只是写下答案,但我认为解释很清楚,您可以理解:)