В общем случае вы можете заново представить любой n-мерный массив в виде линейной последовательности, преобразовав его в серию (n-1) -мерных массивов.
Вот простой пример. Предположим, у нас есть массив объектов 2 x 2:
a b
c d
Языки с индексами массива побуждают вас думать об этом как о вложенной структуре данных, как этот код Python:
a, b, c, d = 'abcd'
data = { 0: { 0 : a, 1 : b }, 1: { 0 : c, 1 : d } }
fetch = lambda x, y: data[y][x]
assert fetch(0, 1) == c
Но вы также можете думать об этом как о плоском массиве, подобном этому:
data2 = [ a, b, c, d ]
data2_width = 2
fetch2 = lambda x, y : data2[(y * data2_width + x)]
assert fetch2(0, 1) == c
Общая идея состоит в том, что вы умножаетесь на длину измерения, чтобы получить следующую строку.
Вы можете применить эту идею рекурсивно к любому количеству измерений. Так что, если ваши размеры - tuvxyz, а длины - TUVWXYZ, то для любого объекта вы просто берете его координаты и вычисляете {(t * T * u * U * v * V * w * W * x * X * y * Y ) + z}.
Чтобы выбрать соседа по измерению u, вы добавляете или вычитаете 1 из u и снова запускаете вычисление.