假设我有二维数组如下:
int[][] temp={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}};
我想让子阵列从X方向1到2和Y方向1到2开始,即
{6,7}
{10,11}
任何人都可以给我解决上述问题。
答案 0 :(得分:4)
你在这里
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 :(得分: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];
}
答案 2 :(得分:1)
只需在接受的答案中添加一点点即可。
您可以创建一个静态方法来对宽度和高度固定的所有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;
}
希望这也会有所帮助!
答案 3 :(得分:0)
您可以实例化一个新数组并循环遍历原始数组的相应索引以初始化子数组。