反转多维数组

时间:2019-05-09 19:49:18

标签: java multidimensional-array copy reverse

我正在尝试反转多维数组,其中每行的列数不相同。

现在,在示例中,我设法反转了数组,但是如果每行的列大小更改怎么办?可以说由{{1},{1,2,3},{1,2} .......}组成的数组是否有一种更聪明的方式来做到这一点而无需为每一行使用if语句? / p>

int[][] array3 = new int[3][4];
int[][] array4 = {{1,2,3},{7,8,6},{3,2,1,0}};

int counter = 2;
for(int row=0; row<array4.length; row++)
{
    if(row == 2)
        counter = 3;
    for(int col=0; col<array4[row].length; col++)
    {
        array3[row][counter] = array4[row][col];
        counter--;
    }
    counter = 2;
}

1 个答案:

答案 0 :(得分:3)

您可以使用两个简单的for循环遍历数组并创建一个新的循环:

int[][] reversed = new int[array.length][];
for (int i = 0; i < array.length; i++) {
    int[] row = array[array.length - i - 1];
    reversed[i] = new int[row.length];
    for (int j = 0; j < row.length; j++) {
        reversed[i][j] = row[row.length - j - 1];
    }
}

通过Java Streams,您可以使用它,它的作用相同:

int[][] reversed = IntStream.rangeClosed(1, array.length)
        .mapToObj(i -> array[array.length - i])
        .map(row -> IntStream.rangeClosed(1, row.length)
                .map(i -> row[row.length - i])
                .toArray())
        .toArray(int[][]::new);

对于显示的输入数组:

int[][] array = {{1, 2, 3}, {7, 8, 6}, {3, 2, 1, 0}};

两种解决方案的结果都是这样:

[[0, 1, 2, 3], [6, 8, 7], [3, 2, 1]]