Скопируйте строку значений из одномерного массива, который представляет трехмерную сетку

Итак, у меня есть одномерный массив, представляющий трехмерную сетку чисел, которая представляет игровой мир, я получаю доступ к отдельным записям (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 параметры соответственно.

У большинства языков есть своего рода реализация копии блочного массива, которая использует собственный код под капотом, то есть который выполняет собственную копию.

Другие вопросы по тегам