How to flatten 2D array to 1D array?
如何将二维数组
1 2 3 4 5 | int a [] = {1,2,6,7,2}; int b [] = {2,44,55,2}; int c [] = {2,44,511,33}; int originalArray [][] = new int[][]{a,b,c}; |
有了番石榴,你可以使用
或
江户十一〔一〕号
用Java 8,你可以"平映射"内部数组:
。
或:
1 2 3 |
。
一个简单的for循环就可以了,这并不困难,但取决于您复制值的顺序。例如(基于您的示例中数组的长度相同的事实):
1 2 3 4 5 6 7 | int[] newArray = new int[3 * a.length]; int index = 0; for (int n = 0; n < a.length; n++) { newArray[index++] = a[n]; newArray[index++] = b[n]; newArray[index++] = c[n]; } |
或者(不同的顺序,a、b、c可以是不同的长度):
1 2 3 4 |
。
有两个步骤:
1)找出创建新矢量的元素总数(1d数组)
2)按预先定义的顺序迭代二维数组,并将其元素复制到创建的向量上。
1 2 3 4 5 6 7 8 9 10 11 12 | int elementsNumber = 0; for (int i = 0; i < originalArray.length; i++) { elementsNumber += originalArray[i].length; } int[] newArray = new int[elementsNumber]; int j = 0; for (int i = 0; i < originalArray.length; i++) { System.arrayCopy (originalArray[i], 0, newArray, j, originalArray[i].length); j += originalArray[i].length; } |
1 2 3 4 5 6 7 8 | int[] oneDArray = new int[arr.length*arr.length]; //Flatten 2D array to 1D array... int s = 0; for(int i = 0; i < arr.length; i ++) for(int j = 0; j < arr.length; j ++){ oneDArray[s] = arr[i][j]; s++; } |
由于无法扩展数组(即初始化时必须声明错误的大小),因此必须遍历数组两次:
1 2 3 4 5 6 7 8 | int size = 0; for (int[] ar : originalArray) size += ar.length; int[] result = new int[size]; int pos = 0; for (int[] ar : originalArray) { System.arraycopy(ar, 0, result, pos, ar.length); pos += ar.length; } |
号
计算OriginalArray中的元素总数。创建该长度的新数组。将元素逐个复制到新数组中。
我对任何图书馆的功能都不熟悉。