查找存储在数组中的网格中的相邻单元(非多维)

时间:2019-04-22 18:07:22

标签: arrays grid

我有一个数组[0 ...至24],它是5x5的网格。给定一个索引,我需要找到8个相邻的单元格(它们的索引)。问题在于,在极端情况下,它会越过另一端。

例如,索引12(中间一个)是

top-left:     12 - grid size+1 => 6
top:          12 - grid size   => 7
top-right:    12 - grid size-1 => 8
left:         12 - 1           => 11
right:        12 + 1           => 13
bottom-left:  12 + grid size-1 => 16
bottom:       12 + grid size   => 17
bottom-right: 12 + grid size+1 => 18

但是,例如,如果我尝试对“ 10”进行同样的操作,则左边的(10-1)会给我9,即上一行。

有没有一种方法可以在不使用2d数组的情况下获得邻居?

1 个答案:

答案 0 :(得分:0)

如果有人感兴趣,我就算了(尽管我不知道这是否是最好的方法):

function getAdjacents(i, gridSize){
  var mod = i%gridSize;
  var adjacents = {
    topLeft: mod == 0 || i < gridSize ? null : i- (gridSize + 1),
    top: i < gridSize ? null : i-gridSize,
    topRight: i < gridSize ||  mod == 4 ? null : i- (gridSize - 1),
    left: mod == 0 ? null : i-1,
    right: mod == 4 ? null : i+1,
    bottomLeft: mod == 0 || i >= (gridSize*gridSize-gridSize) ? null :  i + (gridSize-1),
    bottom: i >= (gridSize*gridSize-gridSize) ? null : i+gridSize,
    bottomRight: mod == 4 || i >= (gridSize*gridSize-gridSize) ? null :  i + (gridSize+1)
  }
  return adjacents;
}