在(二维)数组的末尾开始进行数组搜索

3
我想在数组的末尾开始搜索一个 int,而不是从开头开始。怎么实现呢?
请注意,这是一个二维数组。
编辑:有人问我如何从开头开始搜索:
在我的代码文件中,我打印了一个 8×8 的矩阵,显示随机数字(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;
    }

现在我想要找到用户放弃的数字的最后一个位置。


提供一个从开头进行搜索的例子,我们会将其改为从结尾进行搜索,并进行解释。 - eocron
你是在寻找这个吗?for(int i = array.length; i>0; i--) - Renatas M.
@eocron 我编辑了我的帖子。 - Stef
我根据你在问题上的编辑修改了我的回答。 - Ashkan Mobayen Khiabani
2个回答

4

搜索二维数组需要使用两个循环,但您可以以相反的顺序执行这些循环:

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

我讨厌复制粘贴答案获胜的情况 :( - Gil Sand
@GilSand 我实际上写了一个完全不同的答案,但在他编辑问题后,我进行了编辑并使用了OP的代码,以最好地匹配他的问题,你可以检查编辑以回答 ;) - Ashkan Mobayen Khiabani

2

数组是二维的这一事实与你的问题无关。

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

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

如果你需要将代码翻译成英文,那么你基本上就是在做这个。

对于所有的元素,从 0 开始赋值给 i,在达到 array.length之前,并且在每次迭代之间 将 i 加 1,执行以下操作 (...)

所以你只需要改变循环的参数即可。

例如,你可以说你的起始点(也就是i)可以是其他的数字。如果你想从数组的末尾开始怎么办?

然后,如果你从末尾开始,你真的可以在每次迭代中向i加值吗?不行,你会越界,那么你应该用什么代替i++呢?

此时,如果你从末尾到开头进行迭代,你需要一个停止点。答案就在问题中:我的停止点是数组的开头。因此,循环的中间参数(也就是停止点)应该是代表数组开头的某个东西。你会如何写下它?

请注意,现在你已经理解了逻辑,你也可以迭代每隔一个元素。

而且,你在2D循环中的事实只是意味着你需要在主循环内部有一个内部循环,它将与外部循环以相同的方式工作。想象一下索引是带有坐标的画布,而不仅仅是具有点的线。

如果你不理解我的意思,我会直接写出答案,但我认为解释已经足够清楚了,你应该能理解 :)


感谢您的解释,非常有用。 - Stef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接