簡體   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