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

前端 未结 1 1559
囚心锁ツ
囚心锁ツ 2020-12-18 11:14

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 pr

相关标签:
1条回答
  • 2020-12-18 11:47

    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 < 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 < 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 < array.length; i++)
    {
        if(i < 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);
    
    
    0 讨论(0)
提交回复
热议问题