You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

矩阵邻域遍历优化咨询:替代8个条件判断的方案

优化矩阵邻域遍历的方法

嘿,我太懂你现在的困扰了——写8个几乎一模一样的if判断来检查邻域,不仅代码冗余得离谱,以后要调整邻域范围或者修改判断逻辑时,还得挨个改,简直是纯纯的重复劳动!

其实我们可以用方向数组来彻底解决这个问题,把所有邻域的偏移量存到一个数组里,然后通过循环遍历这个数组来完成所有邻域的检查,代码会简洁很多,可读性和可维护性也大大提升。

具体实现思路

把8个方向的行、列偏移量(比如上是(-1,0),右上是(-1,1),以此类推)整理成一个二维数组,然后遍历这个数组的每一项:

  1. 计算当前邻域位置的行索引 ni = i + dx[k],列索引 nj = j + dy[k]
  2. 统一检查ni和nj是否在矩阵的合法范围内
  3. 如果合法,再判断该位置的值是否为'A',如果是就累加计数器

示例代码(Java风格)

// 定义8个邻域的方向偏移量:上、右上、右、右下、下、左下、左、左上
int[][] directions = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}};
int counter = 0;

for (int[] dir : directions) {
    int ni = i + dir[0];
    int nj = j + dir[1];
    // 统一检查边界合法性
    if (ni >= 0 && ni < a.length && nj >= 0 && nj < a[ni].length) {
        if (a[ni][nj] == 'A') {
            counter++;
        }
    }
}

为什么这个方案更好?

  • 消除重复代码:原来8段几乎一样的判断逻辑,现在只用一段循环就能搞定,彻底告别冗余
  • 可维护性更强:如果以后需要调整邻域范围(比如只检查上下左右4个方向),只需要修改directions数组即可,不用动核心业务逻辑
  • 可读性更高:方向数组一眼就能看出所有要检查的邻域方向,逻辑清晰明了

内容的提问来源于stack exchange,提问作者David Arguedas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:19:42