Combine two integer arrays
本问题已经有最佳答案,请猛点这里访问。
有没有办法在两个数组中创建一个数组?例如。
1 2 3 | int[] array1 = {1,2,3}; int[] array2 = {4,5,6}; int[] array1and2 = array1 + array2; |
不能直接添加它们,必须创建一个新数组,然后将每个数组复制到新数组中。system.arraycopy是一种可用于执行此复制的方法。
1 2 3 |
不管array1和array2的大小,这都可以工作。
下面是一个使用变量参数的简单函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | final static public int[] merge(final int[] ...arrays ) { int size = 0; for ( int[] a: arrays ) size += a.length; int[] res = new int[size]; int destPos = 0; for ( int i = 0; i < arrays.length; i++ ) { if ( i > 0 ) destPos += arrays[i-1].length; int length = arrays[i].length; System.arraycopy(arrays[i], 0, res, destPos, length); } return res; } |
使用:
1 2 3 4 5 6 |
1 2 3 |
不要逐元素复制,与
使用arrayutils.addall(t[],t…):
1 2 3 4 5 | import org.apache.commons.lang3.ArrayUtils; AnyObject[] array1 = ...; AnyObject[] array2 = ...; AnyObject[] mergedArray = ArrayUtils.addAll(array1, array2); |
注:没有测试
1 2 3 4 5 6 7 | int[] concatArray(int[] a, int[] b) { int[] c = new int[a.length + b.length]; int i = 0; for (int x : a) { c[i] = x; i ++; } for (int x : b) { c[i] = x; i ++; } return c; } |
查找两个数组的总大小,并将array1和2设置为两个已添加数组的总大小。然后循环array1,然后循环array2,并将值添加到array1和2中。
是的,但不是那么容易。创建第三个数组,该数组是两个数组组合的大小,并循环遍历每个原始数组,然后移动这些项。还可以查看
任务:给定两个长度相同的int数组array1和array2,zip应该返回一个长度为两倍的数组,其中array1和array2的元素是交错的。也就是说,结果数组的元素0是array1[0]、元素1是array2[0]、元素2是array1[1]、元素3是array2[1]等等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public static int [] zip(int [ ] array1, int [] array2) { //make sure both arrays have same length if (array1.length != array2.length) { throw new IllegalArgumentException("Unequal array lengths - zip not possible"); } int [] zippedArray = new int [array1.length+ array2.length]; int idx_1 = 0; int idx_2 = 0; //for each element of first array, add to new array if index of new array is even for (int i=0; i < zippedArray.length; i+=2){ zippedArray[i]= array1[idx_1++]; } for (int i=1; i < zippedArray.length; i+=2){ zippedArray[i]= array2[idx_2++]; } //check contents of new array for (int item: zippedArray){ System.out.print(item +""); } return zippedArray; } |
我认为您必须分配一个新数组并将值放入新数组中。例如:
1 2 3 4 5 6 7 8 9 10 11 12 | int[] array1and2 = new int[array1.length + array2.length]; int currentPosition = 0; for( int i = 0; i < array1.length; i++) { array1and2[currentPosition] = array1[i]; currentPosition++; } for( int j = 0; j < array2.length; j++) { array1and2[currentPosition] = array2[j]; currentPosition++; } |
就我所知,只要看看它,这个代码就可以工作了。