Найти соседние ячейки в сетке, хранящейся в массиве (не многомерном)

#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;
}