Matrizes denteadas (guia de programação de C#)

Uma matriz denteada é uma matriz cujos elementos são matrizes. Os elementos de uma matriz denteada podem ser de tamanhos e dimensões diferentes. Uma matriz denteada às vezes é chamada de uma "matriz de matrizes". Os exemplos a seguir mostram como declarar, inicializar e matrizes de irregulares de acesso.

A seguir está uma declaração de matriz unidimensional que tem três elementos, cada um deles é uma matriz unidimensional de inteiros:

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

Antes de usar jaggedArray, seus elementos devem ser inicializados. Você pode inicializar os elementos como este:

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

Cada um dos elementos é uma matriz unidimensional de inteiros. O primeiro elemento é uma matriz de inteiros de 5, o segundo é uma matriz de inteiros de 4 e o terceiro é uma matriz de inteiros de 2.

Também é possível usar o inicializadores para preencher os elementos da matriz com valores, caso em que você não precisa que o tamanho da matriz. Por exemplo:

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

Você também pode inicializar a matriz na declaração como este:

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

Você pode usar o seguinte formulário de forma abreviada. Observe que você não pode omitir a new o operador da inicialização de elementos porque não há nenhuma inicialização padrão para os elementos:

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

Uma matriz denteada é uma matriz de matrizes e, portanto, seus elementos são tipos de referência e são inicializados para null.

Você pode acessar os elementos individuais da matriz como nestes exemplos:

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

É possível misturar arrays irregulares e multidimensionais. A seguir está uma declaração e a inicialização de uma matriz unidimensional irregular que contém três elementos de matriz bidimensional de tamanhos diferentes. Para obter mais informações sobre matrizes bidimensionais, consulte Matrizes multidimensionais (guia de programação de C#).

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

Você pode acessar os elementos individuais como mostrado neste exemplo, exibe o valor do elemento [1,0] da primeira matriz (valor 5):

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

O método Length retorna o número de arrays contidas na matriz irregulares. Por exemplo, supondo que você tenha declarado a matriz anterior, esta linha:

System.Console.WriteLine(jaggedArray4.Length);

Retorna um valor 3.

Exemplo

Este exemplo cria uma matriz cujos elementos são os próprios arrays. Cada um dos elementos de matriz tem um tamanho 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
*/

Consulte também

Referência

Arrays (C# Programming Guide)

O único-de matrizes unidimensionais (guia de programação de C#)

Matrizes multidimensionais (guia de programação de C#)

Array

Conceitos

C# Programming Guide