Compartir a través de


Matrices escalonadas (Guía de programación de C#)

Actualización: noviembre 2007

Una matriz escalonada es una matriz cuyos elementos son matrices. Los elementos de una matriz escalonada pueden ser de diferentes dimensiones y tamaños. Una matriz escalonada se denomina también "matriz de matrices". Los ejemplos siguientes muestran cómo declarar, inicializar y tener acceso a las matrices escalonadas.

A continuación, se muestra la declaración de una matriz unidimensional con tres elementos, cada uno de los cuales es una matriz unidimensional de enteros:

int[][] jaggedArray = new int[3][];

Para poder utilizar jaggedArray, se deben inicializar sus elementos. Los elementos se pueden inicializar de la siguiente manera:

jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];

Cada elemento es una matriz unidimensional de enteros. El primer elemento es una matriz de 5 enteros, el segundo es una matriz de 4 enteros y el tercero es una matriz de 2 enteros.

También se pueden utilizar inicializadores para rellenar los elementos de la matriz con valores, en cuyo caso no es necesario especificar el tamaño de la matriz: Por ejemplo:

jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };
jaggedArray[1] = new int[] { 0, 2, 4, 6 };
jaggedArray[2] = new int[] { 11, 22 };

Asimismo, se puede inicializar la matriz en el momento de la declaración de este modo:

    int[][] jaggedArray2 = new int[][] 
{
    new int[] {1,3,5,7,9},
    new int[] {0,2,4,6},
    new int[] {11,22}
};

Puede utilizar el formulario abreviado siguiente. Observe que no se puede omitir el operador new de la inicialización de elementos ya que no existe una inicialización predeterminada para los elementos:

    int[][] jaggedArray3 = 
{
    new int[] {1,3,5,7,9},
    new int[] {0,2,4,6},
    new int[] {11,22}
};

Una matriz escalonada es una matriz de matrices y por consiguiente sus elementos son tipos de referencia y se inicializan en null.

El acceso a elementos individuales de la matriz se realiza como en los siguientes ejemplos:

// Assign 77 to the second element ([1]) of the first array ([0]):
jaggedArray3[0][1] = 77;

// Assign 88 to the second element ([1]) of the third array ([2]):
jaggedArray3[2][1] = 88;

Es posible combinar matrices multidimensionales con matrices escalonadas. A continuación, se muestra la declaración e inicialización de una matriz escalonada unidimensional que contiene dos elementos de matriz bidimensionales de diferentes tamaños:

int[][,] jaggedArray4 = new int[3][,] 
{
    new int[,] { {1,3}, {5,7} },
    new int[,] { {0,2}, {4,6}, {8,10} },
    new int[,] { {11,22}, {99,88}, {0,9} } 
};

Puede obtener acceso a los elementos individuales como se indica en este ejemplo, que muestra el valor del elemento [1,0] de la primera matriz (valor 5):

System.Console.Write("{0}", jaggedArray4[0][1, 0]);

El método Length devuelve el número de matrices contenido en la matriz escalonada. Por ejemplo, suponiendo que ha declarado la matriz anterior, esta línea:

System.Console.WriteLine(jaggedArray4.Length);

devuelve un valor de 3.

Ejemplo

En este ejemplo, se genera una matriz cuyos elementos son también matrices. Cada uno de los elementos de la matriz tiene un tamaño diferente.

class ArrayTest
{
    static void Main()
    {
        // Declare the array of two elements:
        int[][] arr = new int[2][];

        // Initialize the elements:
        arr[0] = new int[5] { 1, 3, 5, 7, 9 };
        arr[1] = new int[4] { 2, 4, 6, 8 };

        // Display the array elements:
        for (int i = 0; i < arr.Length; i++)
        {
            System.Console.Write("Element({0}): ", i);

            for (int j = 0; j < arr[i].Length; j++)
            {
                System.Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1) ? "" : " ");
            }
            System.Console.WriteLine();            
        }
        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
/* Output:
    Element(0): 1 3 5 7 9
    Element(1): 2 4 6 8
*/

Vea también

Conceptos

Guía de programación de C#

Referencia

Matrices (Guía de programación de C#)

Matrices unidimensionales (Guía de programación de C#)

Matrices multidimensionales (Guía de programación de C#)

Array