将数组切成2D数组

时间:2017-10-26 10:08:13

标签: java arrays

我有一种方法可以将一个较大的Array切成几个较小的数组。我希望它将这些数组作为二维数组返回。到目前为止切片工作但我不知道如何将arr2[]元素写入slice[][]。问题是数组slice[?][i]的数量未知。

private short[][] slice(short array1[], int sliceSize)    {

    short arr2[]=null;
    short slice[][]=null;

    for (int offset = 0; offset < array1.length ; offset+=sliceSize) {

            arr2 = Arrays.copyOfRange(array1, offset, offset+sliceSize);

            for(int i=0; i<arr2.length; i++)    {
                System.out.print("\n value: "+ String.valueOf(arr2[i]));
                // slice[?][i]=arr2[i];
            }
        }

    return slice;
}

1 个答案:

答案 0 :(得分:0)

您可以从orignal数组长度轻松了解所需的切片数量。

int sliceCount = arr1.length / sliceSize + 1; 
short[][] slice = new short[sliceCount][];

请注意,如果长度是切片大小的倍数,我们最终会得到一个到多个单元格,我们可以简单地将1减去arr1.length来纠正它(没有保留它)代码简单)

然后,你只需像你一样做一些复制并将结果存储在其中。 由于Arrays.copyOfRange每次调用都会返回一个新的数组实例,因此可以直接存储实例,而不是迭代数组。

for (int i = 0; i < sliceCount; i++) {
    arr2 = Arrays.copyOfRange(array1, i * sliceSize, ( i + 1 ) * sliceSize);
    slice[i] = arr2;
}
return slice;

示例:

[1,2,3,4,5,6,7,8,9] into slice of 4 length
-> [
      [1,2,3,4],
      [5,6,7,8],
      [9,0,0,0]
   ]