ОТВЕТ
Хорошо, это немного смешно, но здесь все идет
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';
(псевдокод)
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 или больше ячейки далеко)
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]
, Это - вероятно, самый быстрый/самый легкий путь, должен просто перечислить всех возможных соседей. Удостоверьтесь, что сделали индекс из связанной проверки все же.
Некоторые языки могли бы предложить ярлыку способ сделать это, но я не знаю ни о ком.
альтернатива @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]);
}
Небольшое преимущество в удобочитаемости, возможная производительность, если можно статически выделить дельты.
Я думаю, что 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 и основанные на нуле нижние индексы для примера
Много зависит от того, каковы Ваши данные. Например, если Ваш 2D массив является логической матрицей, Вы могли бы преобразовать строки в целые числа и использовать битовые операции для нахождения тех, Вы хотите.
Для решения более общего назначения я думаю, что Вы застреваете с индексацией, как решение SebaGR.