查找最低值的坐标(二维数组)

本文关键字:二维数组 坐标 最低值 查找 | 更新日期: 2023-09-27 18:32:32

我觉得我错过了一些非常明显的东西,但我似乎找不到值最低的数组对。

我有一个存储 2D 地图的int[,] worldMapXY,比如说worldMapXY[0,0]worldMapXY[120,120]. map 数组的所有值均为 1(墙''无效(或 0(路径/有效(。

我正在编写一种方法,该方法将在八个基本方向之一中查找坐标以创建生成点。 所以我也有int[,] validSpotArr它有一个最接近我设置生成方向的地图边界子集。 墙/无效位置的值设置为 9999 ,路径/有效位置的值设置为 (x + y) 。 这都是特定于左下角,最接近[0,0],因此"BL"或"左下角">

        case "BL":
        for (int x = (int)border + 1; x < worldX + (int)border / 4; x++)
        {
            for (int y = (int)border + 1; y < worldY + (int)border / 4; y++) 
            {
                if (worldMapXY[x,y] = 0)
                {
                    validSpotArr[x,y] = x + y;
                }
                else
                {
                    validSpotArr[x,y] = 9999;
                }
            }
        }

我无法完全理解的是,如何确定具有最低值的validSpotArr的坐标/索引,以便我可以将它们作为单独的 x 和 y 坐标传递给另一个函数(设置生成点(。 我怀疑有一个 lambda 运算符可能会有所帮助,但我真的不了解 lambda。 显然,这需要成为我的下一个研究点。

例如 - 如果 validSpotArr[23, 45] = 68 ,而 68 是最低值,我如何设置 x=23 和 y=45?

编辑:我试着弄乱这样的东西,但它是不对的:

    Array.IndexOf(validSpotArr, validSpotArr.Min());

查找最低值的坐标(二维数组)

虽然不是你问题的确切答案,但在严格给定的情况下,我可能会从周期内找到它们,即

int minValidSpot = int.MaxValue, minX, minY;
for (int x = (int)border + 1; x < worldX + int(border) / 4; x++)
    {
        for (int y = (int)border + 1; y < worldY + int(border) / 4; y++) 
        {
            if (worldMapXY[x,y] = 0)
            {
                validSpotArr[x,y] = x + y;
            }
            else
            {
                validSpotArr[x,y] = 9999;
            }
            if ( minValidSpot > validSpotArr[x,y] )
            {
                minValidSpot = validSpotArr[x,y];
                minX = x;
                minY = y;
            }
        }
    }

除此之外,如果寻找某种更通用的解决方案,我可能只是扁平化该数组,索引转换 (nD<=>1D( 的数学非常简单。