我有一个大小为N的数组array
。对于它中的每3个索引,我想将它们取出并声明并将这些值分配给另一个大小为3的数组。然后我想回到那个数组并接下来的3并将它放在一个大小为3的不同数组中。对于3个不同的大小为3 a1,a2,a3
的数组,我将这样迭代。一旦完成,我想清空a1,a2,a3
和将NEXT 3值重新添加到3个大小为3的数组中,重复此操作直到达到array.length
这样做最好/最有效的方法是什么?
答案 0 :(得分:7)
作为一般策略,我最初不会担心效率。
尽可能明确地对其进行编码,然后编写一系列单元测试,确认其有效。迭代地提高性能。
比快速编码更快,更容易制作正确的代码。
答案 1 :(得分:3)
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的值来适当地处理剩余物。
答案 2 :(得分:0)
for(int i = 0; i < ##; i++){if(i%3==0){startNewArray}}
答案 3 :(得分:0)
非常简单,你可以通过以下方式实现.... 它是下面的代码片段....
byte [] YourBigArray = new byte [SomeValue];
int temp = 0;
while(temp&lt; YourBigArray.size - 1) { System.arrayCopy(YourBigArray,temp,smallarray,0,3); 温度+ = 3; }
尝试此代码并查看arrayCopy函数的文档....
享受.....