[英]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.