我有一个大小为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的值来适当处理残余物。