查找最低值的坐标(二维数组)
本文关键字:二维数组 坐标 最低值 查找 | 更新日期: 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( 的数学非常简单。