繁体   English   中英

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

[英]Finding the Coordinates (2D Array) of Lowest Value

我感觉好像缺少了非常明显的东西,但是我似乎找不到最低值的数组对。

我有一个int[,] worldMapXY ,其中存储了2D地图,比如worldMapXY[0,0]worldMapXY[120,120] 地图数组的所有值均为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)的数学非常简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM