Я пытаюсь представить матрицу с произвольным размером в Java как 1d-массив, и я борюсь с реализацией функции, которую я пишу, чтобы вычислить правильный индекс в массиве, учитывая местоположение в матрице. Вот то, что я до сих пор:Индексирование многомерных массивов Java
private int indexOf(int... indices) {
assert indices.length == rank() :
"Number of indices does not match rank";
if(indices.length == 1) return indices[0];
int x = 0;
for(int i = 1; i < indices.length; ++i){
x += indices[i] % this.dims[i];
}
return x;
}
Где ранг() возвращает количество измерений в матрице и this.dims представляет собой массив с размером каждого измерения.
Я знаю, что i = y * numCols + x работает для версии 2-d, но у меня просто возникают проблемы с абстрагированием матрицы с переменными размерами.
Спасибо за помощь.
Ваши размеры всегда одинакового размера? Другими словами, это 2D-массив всегда _N x N_ и массив 5D _N x N x N x N x N_? Или может ли 2D-массив быть _N x M_? – pathfinderelite
Второй случай верен. Каждое измерение может быть разных размеров. –
Почему вы не вставляете массивы внутри массивов, эффективно создавая многомерный массив? Дополнительные издержки памяти для этого были бы незначительными, а затем реализация стала тривиальной. И вы можете сделать что-то вроде 'int value = arr [4] [2] [87] [5]' вместо 'int value = arr.indexof (4,2,87,5)'. – MarcG