java: How to split a 2d array into two 2d arrays

14,149

Lets say you have a 2d array of strings like so


String[][] array= new String[][]
{
    {"a","b","c"},
    {"d","e","f"},
    {"h","i","j"},
    {"k","l","m"}
};

Now you need a way to split these arrays at the half way point. Lets get the halfway point. Figure out how big the array is and then cut it in half. Note that you also must handle if the array is not an even length. Example, length of 3. If this is the case, we will use the Math.floor() function.


int arrayLength = array.length;
int halfWayPoint = Math.floor(arrayLength/2);
//we also need to know howmany elements are in the array
int numberOfElementsInArray = array[0].length;

Now we have all the info we need to create two 2d arrays from one. Now we must explicitly copy create and copy the data over.


//the length of the first array will be the half way point which we already have
String [][] newArrayA = new String[halfWayPoint][numberOfElementsInArray];
//this copies the data over
for(int i = 0; i &lt halfWayPoint; i++)
{
    newArrayA[i] = array[i];
}

//now create the other array
int newArrayBLength = array.length - halfWayPoint;
String[][] newArrayB = new String[newArrayBLength][numberOfElementsInArray];
/*
 * This copies the data over. Notice that the for loop starts a halfWayPoint.
 * This is because this is where we left of copying in the first array.
 */
for(int i = halfWayPoint; i &lt array.length; i++)
{
    newArrayB[i] = array[i];
}

And your done!

Now if you want to do it a little nicer, you could do it like this


int half = Math.floor(array/2);
int numberOfElementsInArray = array[0].length;
String [][] A = new String[half][numberOfElementsInArray];
String [][] B = new String[array.length - half][numberOfElementsInArray];
for(int i = 0; i &lt array.length; i++)
{
    if(i &lt half)
    {
        A[i] = array[i];
    }
    else
    {
        B[i] = array[i];
    }

}

And lastly, if you dont want to do it explicitly, you can use the built in functions. System.arraycopy() is one example. Here is a link to its api System.arraycopy()


int half = Math.floor(array/2);
int numberOfElementsInArray = array[0].length;
String [][] A = new String[half][numberOfElementsInArray];
String [][] B = new String[array.length - half][numberOfElementsInArray];
System.arraycopy(array,0,A,0,half);
System.arraycopy(array,half,B,0,array.length - half);

Share:
14,149
user650309
Author by

user650309

Updated on June 04, 2022

Comments

  • user650309
    user650309 almost 2 years

    I'm writing a program to multiply matrices (2d arrays) as efficiently as possible, and for this i need to split my two arrays into two each and send them off to a second program to be multiplied. The issue I have is how to split a 2d array into two 2d arrays, at specific points (halfway). Does anyone have any ideas?