如何从JAVA中的2D数组中获取2D子数组?

问题描述 投票:5回答:4

假设我具有2D数组,如下所示:

int[][] temp={
              {1,2,3,4},
              {5,6,7,8},
              {9,10,11,12}};

并且我想让子数组从X方向1到2和Y方向1到2即开始

{6,7}
{10,11}

任何人都可以给我解决上述问题的方法。

java arrays 2d
4个回答
6
投票

您在这里

    int[][] temp = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
    int[][] a = new int[temp.length][];
    for (int i = 0; i < temp.length; i++) {
        a[i] = Arrays.copyOfRange(temp[i], 1, 3);
    }
    System.out.println(Arrays.deepToString(a));

输出

[[2, 3], [6, 7], [10, 11]]

在评论中回答您的问题如果我们只想访问[[6,7],[10,11]]

    int[][] a = new int[2][];
    for (int i = 1, j = 0; i < 3; i++, j++) {
        a[j] = Arrays.copyOfRange(temp[i], 1, 3);
    }

输出

[[6, 7], [10, 11]]

1
投票

作为不使用Arrays类的示例:

int[][] temp = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
int[][] subArray = new int[temp.length][];
for (int i = 0; i < subArray.length; i++) {
    subArray[i] = new int[2];
    subArray[i][0] = temp[i][1];
    subArray[i][1] = temp[i][2];
}

然后,您可以访问所需的subArray的任何部分。这将访问值[[6,7],[10,11]]:

for (int x = 1; x < 3; x++) {
    System.out.println(subArray[x][0]);
    System.out.println(subArray[x][1]);
}

[附加]解决修改后的问题:

如果要创建一个较小的数组,则可以使用循环的起点和终点以及在循环中访问的索引,例如,这将创建您要的数组:

int[][] subArray = new int[2][];
for (int i = 1; i < temp.length; i++) {
    subArray[i-1] = new int[2];
    subArray[i-1][0] = temp[i][1];
    subArray[i-1][1] = temp[i][2];
}

0
投票

您可以实例化一个新数组,并遍历原始数组的相应索引以初始化子数组。


0
投票

只需在接受的答案中添加一点。

您可以创建一个静态方法来对所有具有固定宽度和高度的2D数组进行泛化

public static char[][] get2DSubArray(char[][] origArray, int fromRow, int toRow, int fromColumn, int toColumn) {
    char[][] subArray = new char[toColumn - fromColumn][];

    for (int i = fromCol; i < toCol; i++) {
        subArray[i - fromCol] = Arrays.copyOfRange(origArray[i], fromRow, toRow);
    }

    return subArray;
}

2DSubArray

希望这也会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.