如何平面二维数组1D数组?
我如何将2维数组int originalArray[][]
平铺为1维数组?
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};
一个简单的循环会做,这并不难,但将取决于你的命令复制的价值。 例如(基于你的例子中的数组都具有相同的长度):
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可以有不同的长度):
int[] newArray = new int[a.length + b.length + c.length]; System.arrayCopy(a, 0, newArray, 0, a.length); System.arrayCopy(b, 0, newArray, a.length, b.length); System.arrayCopy(c, 0, newArray, a.length + b.length, c.length);
番石榴 ,你可以使用
int[] all = Ints.concat(originalArray);
要么
int[] all = Ints.concat(a, b, c);
用Java 8,你可以“扁平化”内部数组:
int[] flatArray = Arrays.stream(originalArray) .flatMapToInt(Arrays::stream) .toArray();
要么:
int[] flatArray = Stream.of(a, b, c) .flatMapToInt(Arrays::stream) .toArray();
将有2个步骤:
1)找出创build一个新向量的元素总数(1d数组)
2)以预定义的顺序迭代你的二维数组,并将其元素复制到创build的向量中
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; }
由于数组不能被扩展(即你必须在初始化时声明一个错误的大小),你必须遍历数组两次:
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; }
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++; }
计算originalArray中元素的总数。 创build该长度的新数组。 将元素逐个拷贝到新的数组中。
我不熟悉任何图书馆的function。