你如何解包一个二维数组?

时间:2021-05-11 21:40:25

标签: java

如果我有一个二维数组:

int[][] a = {
        {1, 2, 3}, 
        {4, 5, 6, 9}, 
        {7}, 
    };

我将如何解压:

int[] a = {1, 2, 3, 4, 5, 6, 9, 7}

我知道你可以使用 for 循环来做到这一点,但它看起来很笨重,我想知道是否有更好的方法来做到这一点:

int[] b = new int[9]
for (int i = 0; i < a.length; ++i) {
    for(int j = 0; j < a[i].length; ++j) {
         b.append([i][j])
    }
}

2 个答案:

答案 0 :(得分:5)

使用流很容易。

  • 第一个流返回单个一维数组(本质上是行)。
  • 下一个将其中的每一个扁平化为一个流。
  • 然后该流被收集回一个数组。
int[][] a = {
        {1, 2, 3}, 
        {4, 5, 6, 9}, 
        {7}, 
    };
int[] oneD = Arrays.stream(a).flatMapToInt(Arrays::stream).toArray();
System.out.println(Arrays.toString(oneD));

印刷品

[1, 2, 3, 4, 5, 6, 9, 7]

答案 1 :(得分:0)

不那么简洁,但更快速、更直接地解决您的问题:

void unpack2D(int[][] arr2d) {
        int acumulator = 0;
        for(int[] innerArr: arr2d){
            acumulator += innerArr.length;     
        }
        int[] b = new int[acumulator];
        int pointer = 0;
        for (int[] innerArr: arr2d) {
            System.arraycopy(innerArr, 0, b, pointer, innerArr.length);
            pointer += innerArr.length;
        }
        System.out.println(Arrays.toString(b));
}