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