在 Go 中访问二维数组中的相邻元素的最有效方法是啥?

Posted

技术标签:

【中文标题】在 Go 中访问二维数组中的相邻元素的最有效方法是啥?【英文标题】:What is the most efficient way of visiting neighbor elements in a 2-D array in Go?在 Go 中访问二维数组中的相邻元素的最有效方法是什么? 【发布时间】:2016-01-16 12:18:13 【问题描述】:

我遇到的问题是我必须访问二维数组中元素[i, j] 的所有八个邻居。

但是,考虑到数组越界的错误,我必须在[i-1, j][i+1, j] 上做很多if else 语句...这对我来说有点冗长。

所以我想知道在 Go 中是否有任何有效的方法来解决这类问题? 喜欢错误捕捉系统?

【问题讨论】:

Go 是一种冗长的语言。它只有 4 或 8 次访问,具体取决于您是否要使用那些对角相邻的项目。只需用一个干净直接的条件结构写出来。仍然是 20-30 行的函数,这没什么大不了的。 我认为您解决问题的方法有误,您应该知道界限,也许如果您分享一些代码,有人可以提供更好的帮助。 唯一有效的方法是最小化所需的边界检查量。但我想你已经想通了。现在如何做到这一点完全取决于您的用例。您是否循环扫描整个阵列(元胞自动机)?或者你是在随机检查元素吗?分享一些代码肯定会有帮助。 【参考方案1】:

一般的解决方案将遵循pseudo-code presented here。 请参阅 yucchiy/minesweeper field.go#GetNeighbors(x, y int) 的 Go 示例。

这取决于您是否可以使用由字段组成的实际 Array 对象来丰富您的数据结构,每个字段都知道它的邻居。然后“访问二维数组中的相邻元素”变成向字段询问作为其邻居的字段列表。

【讨论】:

以上是关于在 Go 中访问二维数组中的相邻元素的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

在多维数组和单个数组之间存储数据的最有效方法是啥?

从数组列表中删除元素的最有效方法? [关闭]

在 React 中迭代数据数组时呈现 JSX 元素的最有效方法

在Javascript中更新对象数组中的键的最有效方法是啥? [复制]