我有一个大小为N的数组array。对于其中的每个3个索引,我都想将其取出并声明并将这些值分配给另一个大小为3的数组。然后,我想回到该数组并采用接下来的3个,并将其放入大小为3的另一个数组中。我将像这样对大小为3的3个不同数组进行迭代a1,a2,a3完成此操作后,我想清空a1,a2,a3并将NEXT 3个值重新添加到3个中大小为3的数组重复此操作,直到达到array.length

最好/最有效的方法是什么?

最佳答案

for (int i=0; i<=N-9; i+=9) {
 System.arrayCopy(arrayN, i, a1, 0, 3);
 System.arrayCopy(arrayN, i+3, a2, 0, 3);
 System.arrayCopy(arrayN, i+6, a3, 0, 3);
 // presumably do other stuff here
}


这是一种非常脆弱但快速的方法。每次以前的值都会被覆盖,因此无需清除。如果确实需要清除arrayN,则可以在循环后仅Arrays.fill(arrayN, null)

编辑:对于不太脆弱的答案,我将假设您会膨胀m x n数组。代替对a1,a2,... am进行硬编码,创建2D数组a[m][n]

for (i=0; i<=N-m*n; i+=m*n) {
 for (int j=0; j<m; j++) System.arrayCopy(arrayN, i+n*j, a[j], 0, n);
 // presumably do other stuff here
}


然后,如Adrian在评论中所建议的那样,在循环外声明i并使用其相对于N的值来适当处理残余物。

10-05 19:47