Скопируйте строку значений из одномерного массива, который представляет трехмерную сетку
Итак, у меня есть одномерный массив, представляющий трехмерную сетку чисел, которая представляет игровой мир, я получаю доступ к отдельным записям (X,Y,Z) следующим образом:
array[x + width * (y + height * z)]
Есть ли способ, которым я могу скопировать всю строку (например, все значения Z для (1,1)) без зацикливания (я уже зацикливаюсь на каждой записи. Я хочу сохранить производительность, проверяя на пустые строки (все 0с) а пропустить их обработку)? Я бы предпочел не использовать зубчатый массив, если это возможно.
1 ответ
Вы должны убедиться, что ваши элементы данных расположены линейно как строки в памяти:
row|row|row
... так далее.
Затем вы можете использовать ту же самую арифметику доступа к массиву, упомянутую в вашем вопросе, чтобы определить диапазон индекса для этой строки, давайте назовем диапазон n->m
, а затем сделать быструю копию блока для элементов n->m
согласно следующему:
memcpy
- C / C++Array.Copy
- C#Arrays.copyOfRange
- Java, хорошо подходит для нативных типов; Копирование цикла может быть лучше для объектов.
каждый из которых займет n
а также m-n
как start
а также size
параметры соответственно.
У большинства языков есть своего рода реализация копии блочного массива, которая использует собственный код под капотом, то есть который выполняет собственную копию.