DekGenius.com
[ Team LiB ] Previous Section Next Section

Recipe 9.4 Reversing a Jagged Array

Problem

The Array.Reverse method does not provide a way to reverse each subarray in a jagged array. You need this functionality.

Solution

Use the ReverseJaggedArray method:

public static void ReverseJaggedArray(int[][] theArray)
{
    for (int rowIndex = 0; 
      rowIndex <= (theArray.GetUpperBound(0)); rowIndex++)
    {
        for (int colIndex = 0; 
             colIndex <= (theArray[rowIndex].GetUpperBound(0) / 2); 
             colIndex++)
        {
            int tempHolder = theArray[rowIndex][colIndex];                        
            theArray[rowIndex][colIndex] = 
              theArray[rowIndex][theArray[rowIndex].GetUpperBound(0) - 
                      colIndex];   
            theArray[rowIndex][theArray[rowIndex].GetUpperBound(0) - 
                      colIndex] =  tempHolder;      
        }
    }
}

Discussion

The following TestReverseJaggedArray method shows how the ReverseJaggedArray method is used:

public static void TestReverseJaggedArray( )
{
    int[][] someArray = 
      new int[][] {new int[3] {1,2,3}, new int[6]{10,11,12,13,14,15}};

    // Display the original array
    for (int rowIndex = 0; rowIndex < someArray.Length; rowIndex++)
    {
        for (int colIndex = 0; 
          colIndex < someArray[rowIndex].Length; colIndex++)
        {
            Console.WriteLine(someArray[rowIndex][colIndex]);
        }
    }
    Console.WriteLine( );

    ReverseJaggedArray(someArray);

    // Display the reversed array
    for (int rowIndex = 0; rowIndex < someArray.Length; rowIndex++)
    {
        for (int colIndex = 0; 
          colIndex < someArray[rowIndex].Length; colIndex++)
        {
            Console.WriteLine(someArray[rowIndex][colIndex]);
        }
    }
}

This method displays the following:

1
2
3
10
11
12
13
14
15

3     The first reversed subarray
2
1
15    The second reversed subarray
14
13
12    The third reversed subarray
11
10

The logic used to reverse each subarray of a jagged array is very similar to the reversal logic discussed in the previous recipe. The ReverseJaggedArray method uses the same basic logic presented in Recipe 9.2 to reverse each element in the array; however, a nested for loop is used instead of a single for loop. The outer for loop iterates over each element of the first dimensioned array of the jagged array (there are two elements in this array). The inner for loop is used to iterate over each array contained within the second dimensioned array of the jagged array. The reverse logic is then applied to the elements handled by the inner for loop. This allows each array contained by the first dimensioned array in the jagged array to be reversed.

See Also

Recipe 9.2 and Recipe 9.3.

    [ Team LiB ] Previous Section Next Section