Нахождение соседей в двухмерной антенной решетке

ОТВЕТ

Хорошо, это немного смешно, но здесь все идет

BAD
@import "~ag-grid/dist/styles/ag-grid.css";
@import "~ag-grid/dist/styles/ag-theme-material.css";
GOOD
@import 'ag-grid-community/dist/styles/ag-grid.css';
@import 'ag-grid-community/dist/styles/ag-theme-material.css';

После проверки моего package.json я снова заметил было 3 вещи ag-grid под зависимостями

"ag-grid",
"ag-grid-angular",
"ag-grid-community"

CSS, который я импортировал, был из старой версии "ag-grid". После удаления "ag-grid" из package.json я импортировал соответствующий CSS, и все сразу заработало ...

Окончательный добрый код

// package.json
    "ag-grid-angular": "^20.0.0",
    "ag-grid-community": "^20.0.0",

// _vendor.scss where I import most my node_modules css

    // @import "~ag-grid/dist/styles/ag-grid.css";
    // @import "~ag-grid/dist/styles/ag-theme-material.css";
    @import 'ag-grid-community/dist/styles/ag-grid.css';
    @import 'ag-grid-community/dist/styles/ag-theme-material.css';

24
задан Alessandro Jacopson 10 September 2014 в 08:14
поделиться

5 ответов

(псевдокод)

row_limit = count(array);
if(row_limit > 0){
  column_limit = count(array[0]);
  for(x = max(0, i-1); x <= min(i+1, row_limit); x++){
    for(y = max(0, j-1); y <= min(j+1, column_limit); y++){
      if(x != i || y != j){
        print array[x][y];
      }
    }
  }
}

, Конечно, который проводит почти столько же строк сколько исходное трудно кодированное решение, но с этим можно расширить "окружение" так, как Вы можете (2-3 или больше ячейки далеко)

29
ответ дан Seb 28 November 2019 в 22:45
поделиться

array[i][j] имеет соседей

array[i-1][j]
array[i][j-1]
array[i-1][j-1]
array[i+1][j]
array[i][j+1]
array[i+1][j+1]
array[i+1][j-1]
array[i-1][j+1]

, Это - вероятно, самый быстрый/самый легкий путь, должен просто перечислить всех возможных соседей. Удостоверьтесь, что сделали индекс из связанной проверки все же.

Некоторые языки могли бы предложить ярлыку способ сделать это, но я не знаю ни о ком.

3
ответ дан Ben S 28 November 2019 в 22:45
поделиться

альтернатива @SebaGR, если Ваш язык поддерживает это:

var deltas = { {x=-1, y=-1}, {x=0, y=-1}, {x=1, y=-1},
               {x=-1, y=0},               {x=1, y=0},
               {x=-1, y=1},  {x=0, y=1},  {x=1, y=1} };
foreach (var delta in deltas)
{
    if (x+delta.x < 0 || x + delta.x >= array.GetLength(0) ||
        y+delta.y < 0 || y + delta.y >= array.GetLength(1))
        continue;

    Console.WriteLine("{0}", array[x + delta.x, y + delta.y]);
}

Небольшое преимущество в удобочитаемости, возможная производительность, если можно статически выделить дельты.

5
ответ дан FryGuy 28 November 2019 в 22:45
поделиться

Я думаю, что Ben корректен в своем подходе, хотя я мог бы переупорядочить его, для возможного улучшения местности.

array[i-1][j-1]
array[i-1][j]
array[i-1][j+1]

array[i][j-1]
array[i][j+1]

array[i+1][j-1]
array[i+1][j]
array[i+1][j+1]

Один прием для предотвращения границ, проверяющих проблемы, должен сделать измерения массива 2 большими, чем необходимый. Так, немного матрицы как это

3 1 4
1 5 9
2 6 5

на самом деле реализовано как

0 0 0 0 0
0 3 1 4 0
0 1 5 9 0
0 2 6 5 0
0 0 0 0 0 

тогда при подведении итогов, я могу преобразовать в нижний индекс от 1 до 3 в обоих размерах, и ссылки на массив выше, как гарантируют, будут допустимы, и не иметь никакого эффекта на заключительную сумму. Я принимаю c и основанные на нуле нижние индексы для примера

13
ответ дан EvilTeach 28 November 2019 в 22:45
поделиться

Много зависит от того, каковы Ваши данные. Например, если Ваш 2D массив является логической матрицей, Вы могли бы преобразовать строки в целые числа и использовать битовые операции для нахождения тех, Вы хотите.

Для решения более общего назначения я думаю, что Вы застреваете с индексацией, как решение SebaGR.

0
ответ дан Sarah Mei 28 November 2019 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: