#arrays #grid
#массивы #сетка
Вопрос:
У меня есть массив [от 0 … до 24], который представляет собой сетку 5×5. Учитывая один индекс, мне нужно найти 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:
Если кому-то интересно, я понял это (хотя я не знаю, лучший ли это способ):
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;
}