Вероятно, вы ищете функцию сопряжения Кантора . Он определен для NxN, поэтому вы можете использовать его для сколь угодно больших размеров. Как упоминалось на странице википедии, оно может быть индуктивно обобщено на массив измерения n, в вашем случае n = 3 работает просто отлично.
На приведенной выше странице также объясняется инвертирование функции, поэтому вы можете получить свои координаты в массиве по заданному номеру, что в точности соответствует желаемому с nthElement
.
Конечно, Кантор определил только один возможный способ пройти через двумерное поле. Есть и другие возможные прогулки, но этот самый популярный способ сделать это.
Edit: Я должен отметить, что если ваш массив имеет прямоугольные размеры, функция спаривания Кантора будет принимать размеры самого большого вида. Таким образом, связанные числа больше не находятся в вашем массиве. F.ex. массив размером 1000x2 будет рассматриваться как массив 1000x1000, а числа, соответствующие записям в вашем фактическом массиве, будут представлять собой непоследовательный список чисел 0..1000 * 1000.
Однако, если ваши три измерения всегда одинаковы, то этот момент можно полностью игнорировать.
В ответ на комментарий: Row-by-row и Cantor - это просто разные способы пройти через пространство матрицы. Преимущество спаривания Кантора состоит в том, что оно определяется над натуральными числами и, следовательно, также применимо, если у вас нет точных значений для ваших размеров матрицы, или ваша матрица со временем увеличивается.