如何平面二维数组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。