关于java:如何将2D数组展平为1D数组?

How to flatten 2D array to 1D array?

如何将二维数组int originalArray[][]展平为一维数组?

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};

有了番石榴,你可以使用

int[] all = Ints.concat(originalArray);

江户十一〔一〕号


用Java 8,你可以"平映射"内部数组:

1
2
3
int[] flatArray = Arrays.stream(originalArray)
        .flatMapToInt(Arrays::stream)
        .toArray();

或:

1
2
3
int[] flatArray = Stream.of(a, b, c)
        .flatMapToInt(Arrays::stream)
        .toArray();


一个简单的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
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);


有两个步骤:

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中的元素总数。创建该长度的新数组。将元素逐个复制到新数组中。

我对任何图书馆的功能都不熟悉。