algorithm - 获取二维数组中的相邻元素?

标签 algorithm arrays language-agnostic matrix multidimensional-array

我有一个二维数组,比方说

0 0 0 0 0
0 2 3 4 0
0 9 1 5 0
0 8 7 6 0
0 0 0 0 0

我需要得到与 1 相邻的所有数字(2, 3, 4, 5, 6, 7, 8, 9)

是否有比以下更不丑陋的解决方案:

topLeft = array[x-1][y-1]
top  = array[x][y-1]
topRight = array[x+1][y-1]
# etc

谢谢!

最佳答案

如果您不担心顺序,最干净的可能是使用几个循环:

result = new List<int>(8);
for (dx = -1; dx <= 1; ++dx) {
    for (dy = -1; dy <= 1; ++dy) {
        if (dx != 0 || dy != 0) {
            result.Add(array[x + dx][y + dy]);
        }
    }
}

如果顺序很重要,您可以按照您想要的顺序构建所有 (dx, dy) 的列表,然后对其进行迭代。

正如评论中所指出的,您可能想要添加边界检查。您可以这样做(假设顺序无关紧要):

List<int> result = new List<int>(8);
for (int dx = (x > 0 ? -1 : 0); dx <= (x < max_x ? 1 : 0); ++dx)
{
    for (int dy = (y > 0 ? -1 : 0); dy <= (y < max_y ? 1 : 0); ++dy)
    {
        if (dx != 0 || dy != 0)
        {
            result.Add(array[x + dx][y + dy]);
        }
    }
}

关于algorithm - 获取二维数组中的相邻元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2035522/

相关文章:

java - 找到 (i,j) 对,使得 i<j 并且 (a[i] + a[j]) 最大

language-agnostic - 默认情况下,面向对象编程语言中的引用应该是不可空的吗?

database - 长期交易是否可以接受?

c++ - 二维中一组点中以 X 轴为底的最大空矩形

java - 考虑速度的特定路径算法

algorithm - 变质发生器

python - 这是最优素数生成器吗?

python - 使用列表理解替换 m x n 数组中的元素

javascript - 找到两个数组的可用组合(排列?)

language-agnostic - 我应该大写常量吗?