Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get 2D subarray from 2D array in JAVA?

Tags:

java

arrays

2d

Suppose I have 2D array as follow:

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

and i want to get sub-array start from X direction 1 to 2 and Y direction 1 to 2 i.e.

{6,7}
{10,11}

can anyone give me solution for above problem.

like image 685
Somnath Kadam Avatar asked May 03 '13 15:05

Somnath Kadam


People also ask

How do you read a 2D array in Java?

Accessing 2D Array Elements In Java, when accessing the element from a 2D array using arr[first][second] , the first index can be thought of as the desired row, and the second index is used for the desired column.

Can you get a Subarray in Java?

Use Arrays. copyOfRange() method to get a subarray.

How do you sort a 2D array in Java?

To column-wise sort a 2D Array in Java, call the “Arrays. sort()” method with a “Comparator interface”. A Comparator interface defines a “compare()” method that accepts two parameters and then compares them with each other. If the passed parameters are equal, it returns zero.


2 Answers

Here you are

    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));

output

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

answering your question in comment if we want to access only [[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);
    }

output

[[6, 7], [10, 11]]
like image 143
Evgeniy Dorofeev Avatar answered Oct 05 '22 08:10

Evgeniy Dorofeev


As an example without using the Arrays class:

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];
}

You can then access any part of subArray that you want. This will access the values [[6, 7], [10, 11]]:

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

[Additional] To address the modified question:

If you want to create a smaller array you can play around with the start and end points of the loop, and the indices accessed within the loop, for example this will create the array you ask for:

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];
}
like image 22
Matt Hyde Avatar answered Oct 05 '22 08:10

Matt Hyde