我有一个数组[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数组的情况下获得邻居?
答案 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;
}