所以我有一个代表游戏世界的 3D 数字网格的 1D 数组,我访问单个条目(X,Y,Z),如下所示:
array[x + width * (y + height * z)]
有没有一种方法可以在不循环的情况下复制一整行(例如,(1,1)的所有 Z 值)(我已经遍历每个条目。我想通过检查空行来节省性能(所有0s)并跳过处理它们)?如果可能的话,我宁愿不使用锯齿状数组。
所以我有一个代表游戏世界的 3D 数字网格的 1D 数组,我访问单个条目(X,Y,Z),如下所示:
array[x + width * (y + height * z)]
有没有一种方法可以在不循环的情况下复制一整行(例如,(1,1)的所有 Z 值)(我已经遍历每个条目。我想通过检查空行来节省性能(所有0s)并跳过处理它们)?如果可能的话,我宁愿不使用锯齿状数组。
您必须确保您的数据元素在内存中线性排列为行:
row|row|row
... ETC。
然后,您可以使用问题中提到的相同类型的数组访问算法来确定该行的索引范围,让我们调用 range n->m
,然后根据以下内容对元素进行快速块复制n->m
:
memcpy
- C/C++Array.Copy
- C#Arrays.copyOfRange
- Java,适用于原生类型;循环复制可能更适合对象。每个都将分别采用n
and m-n
asstart
和size
参数。
大多数语言都会有某种块数组副本的实现,它在后台使用本机代码,即执行本机副本。