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