首页 > 解决方案 > 如何更改二维数组的大小?

问题描述

如何在不重新排列数组中的数字的情况下更改二维数组的大小,主要使用 for 循环并且仅使用内置方法?例如 {{4,5,6,7,10}, {8,4,3,9,13}} 变为 {{4}, {5,6}, {7,10,8}, { 4,3,9,13}}。

我尝试将二维数组分成两个单独的部分,然后将其添加回新的二维数组。我不确定如何创建第二个二维数组。

标签: javaarrays

解决方案


有很多方法可以做到这一点。这是一个适用于
源自二维数组的任何三角形数量的元素。

首先,将它们全部展平为一个数组。

int[] oneD = Arrays.stream(src).flatMapToInt(Arrays::stream).toArray();

然后反转长度,应该是下面kk = n(n+1)/2行数。并且 2D 结果是部分分配的。

int rows = (int)(Math.sqrt(2*oneD.length + .25) -.5);
int[][] dest = new int[rows][];

现在只需从oneD数组复制到目标即可。

for (int i = 0, s = 0, e = 1; i < rows; i++) {
    dest[i] = Arrays.copyOfRange(oneD, s, e );
    s = e;
    e += i+2;
}

for (int[] arr : dest) {
   System.out.println(Arrays.toString(arr));
}   

印刷

[4]
[5, 6]
[7, 10, 8]
[4, 3, 9, 13]

推荐阅读