首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >避免访问越界数组的最干净的方法?

避免访问越界数组的最干净的方法?
EN

Stack Overflow用户
提问于 2020-05-12 15:11:20
回答 4查看 106关注 1票数 1

假设我有一个5x5二维阵列。对于数组中的给定位置,我需要检查相邻位置是否包含某个特定值。如何处理位于数组边缘的元素?

例如,我的第一个想法是处理这样的事情;

代码语言:javascript
复制
if(array[i-1][j] != 'A' && array[i][j-1] != 'A' && array[i+1][j] != 'A' && array[i][j+1] != 'A')

但给定i或j为0/4的任何元素,其中一条(或两条)语句将尝试检查超出数组维数界限的内容。有没有一种干净利落的方法,不用嵌套一堆if语句来检查元素是否在边缘?

EN

回答 4

Stack Overflow用户

发布于 2020-05-12 15:21:00

您可以使用布尔逻辑和短路评估

代码语言:javascript
复制
if ((i == 0 || array[i-1][j] != 'A') &&
    (j == 0 || array[i][j-1] != 'A') &&
    (i == 4 || array[i+1][j] != 'A') &&
    (j == 4 || array[i][j+1] != 'A'))
{
    ...
}

我假设你想把array[-1][j] != 'A'等认为是真的。如果不是,则表达式将更改。

票数 1
EN

Stack Overflow用户

发布于 2020-05-12 15:21:09

这是图像处理中的一个常见问题。正如molbdnilo在评论中指出的那样,一种常见的解决方案是添加一些填充;由于您使用的是3x3邻域,因此您需要在所有边只添加一个像素。

有时使用的另一种解决方案是镜像超出图像界限的访问。也就是说,如果是x>bound,你就用(2*bound-x)代替,y也一样,或者你也可以用if (x>bound) x=bound。这里的一个共同因素是通过分别处理x和y来限制if语句的数量。

票数 1
EN

Stack Overflow用户

发布于 2020-05-12 15:14:20

您可以尝试将算法分成两部分:

  • 首先完成5x5内部3x3数组中的所有情况,该5x5没有边情况
  • 完成所有剩余的边

在每种情况下,你都知道自己处于什么状态,所以你可以最小化检查

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61745814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档