在二维数组中查找相邻像元的有效方法

桑德·科登霍夫(Sander Koldenhof)

我有一个2D类的Tiles数组。在创建运动场时,我必须生成所有直接相邻的单元(水平,垂直,对角线)。我首先生成一个用新的Tile填充每个单元格的字段,然后(完成后)我遍历2d数组以使用此循环来计算邻居:

int dnDistance= 1; //Direct Neighbor Distance.

for (int iMapY = 0; iMapY < playfieldHeight; iMapY++)
{
    for (int iMapX = 0; iMapX < playfieldWidth; iMapX++)
    {
        for (int yOffset = -dnDistance; yOffset <= dnDistance; yOffset++)
        {
            for (int xOffset = -dnDistance; xOffset <= dnDistance; xOffset++)
            {
                if ((iMapX + xOffset >= 0 && iMapX + xOffset < playfieldWidth) && (iMapY + yOffset >= 0 && iMapY + yOffset < playfieldHeight))
                { 
                    if (!(yOffset == 0 && xOffset == 0))
                    { 
                            playfieldTiles[iMapX, iMapY].dnTiles.Add(playfieldTiles[iMapX + xOffset, iMapY + yOffset]);
                    }
                }
            }
        }
    }
}

使用这种方法,我必须第二次遍历整个2d数组,在一个for循环中,在一个for循环中,在一个for循环中创建一个for循环,这有时还不清楚。必须有更好的方法,对吗?

我发现了一篇看起来相似但不完全相同的帖子,或者我不太了解它:

艾比

当它正常工作就可以了!

这里有一些优化,使其更易于调试

var playfieldHeight = 5;
var playfieldWidth = 5;
var playfieldTiles = new byte[playfieldWidth + dnDistance * 2, playfieldHeight + dnDistance * 2];
var len1 = playfieldWidth * playfieldHeight;
var len2 = dnDistance * 2 + 1;

for (var i = 0; i < len1; i++)
{
    var ix = i % playfieldWidth;
    var iy = i / playfieldWidth;
    for (var j = 0; j < len2 * len2; j++)
    {
        var jx = j % len2 - dnDistance;
        var jy = j / len2 - dnDistance;
        Console.WriteLine($"x1: {ix}, y1: {iy}, x2: {jx}, y2: {jy}");
    }
}

现在,您只有2个循环,即场和邻居。

您可以使用一个来进一步优化它,for但是我认为可读性会下降(在循环内)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从二维数组中查找最大元素和最大元素列表的最有效方法?

确定具有周期性条件的二维网格中的相邻像元

计算二维Numpy数组中数字对频率的最有效方法

检查二维python数组中每个值的有效方法

在二维numpy数组中获取邻居的有效方法

在 Java 中修剪二维数组的有效方法

生成一维数组的多个移位的二维数组的有效方法

有效地为二维 numpy 数组中的一组连续值查找索引

快速检查二维数组的有效索引

有效替换二维数组的行或列

获取二维数组范围内所有元素的有效方法?

二维numpy数组中带有索引的Pandas数据帧的有效子集

如何有效地在 Javascript 中删除二维数组中的空列

获取值并避免二维数组产生内循环的有效方法

这是返回二维数组的有效方法吗?

创建一系列随机改组二维数组的有效方法

在二维numpy数组中计算False值的最有效(和pythonic)方法?

将protobuf二维重复值转换为数组的有效方法

搜索二维数组的更有效方法 - 匹配后中断?

计算二维 numpy 数组频率的有效方法

使用获得二维数据的有效方法

Javascript有效地获取二维数组中某个值的行号

从一维数组获取二维数组(一种邻接矩阵)的有效方法

在 Python 中匹配二维坐标的最有效方法

查看包含多个单个数组的二维数组中是否存在具有特定值集的单个数组的有效方法?斯威夫特 4

在二维数组中查找重叠位置的更快方法

numpy - 为二维数组中的每对行计算 f(v1,v2) 的最有效方法

切片二维数组和跳过索引的有效方法;重复提取小片段

创建初始重复数据的二维字符串数组的最有效方法是什么?