Matrici irregolari (Guida per programmatori C#)Jagged Arrays (C# Programming Guide)

Una matrice di matrici è una matrice i cui elementi sono costituiti da matrici.A jagged array is an array whose elements are arrays. Gli elementi di una matrice di matrici possono presentare dimensioni e misure diverse.The elements of a jagged array can be of different dimensions and sizes. Una matrice di matrici è chiamata talvolta "matrice irregolare".A jagged array is sometimes called an "array of arrays." Gli esempi seguenti mostrano come dichiarare, inizializzare e accedere a matrici di matrici.The following examples show how to declare, initialize, and access jagged arrays.

Di seguito è riportata la dichiarazione di una matrice unidimensionale a tre elementi, ognuno dei quali è una matrice unidimensionale di Integer:The following is a declaration of a single-dimensional array that has three elements, each of which is a single-dimensional array of integers:

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

Prima di poter usare jaggedArray, è necessario che siano stati inizializzati i relativi elementi.Before you can use jaggedArray, its elements must be initialized. È possibile inizializzare gli elementi nel modo seguente:You can initialize the elements like this:

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

Ognuno degli elementi è costituito da una matrice unidimensionale di Integer.Each of the elements is a single-dimensional array of integers. Il primo elemento è una matrice di 5 Integer, il secondo una matrice di 4 Integer e il terzo una matrice di 2 Integer.The first element is an array of 5 integers, the second is an array of 4 integers, and the third is an array of 2 integers.

È possibile usare gli inizializzatori anche per immettere i valori negli elementi delle matrici. In questo caso, non occorre conoscere le dimensioni delle matrici.It is also possible to use initializers to fill the array elements with values, in which case you do not need the array size. Ad esempio:For example:

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

È inoltre possibile inizializzare la matrice al momento della dichiarazione, come nell'esempio seguente:You can also initialize the array upon declaration like this:

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

È possibile usare la forma abbreviata seguente.You can use the following shorthand form. Non è possibile omettere l'operatore new poiché non è prevista alcuna inizializzazione predefinita per gli elementi:Notice that you cannot omit the new operator from the elements initialization because there is no default initialization for the elements:

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

Una matrice irregolare è una matrice di matrici, quindi i relativi elementi sono tipi di riferimento inizializzati su null.A jagged array is an array of arrays, and therefore its elements are reference types and are initialized to null.

È possibile accedere ai singoli elementi di una matrice, come negli esempi seguenti:You can access individual array elements like these examples:

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

È possibile combinare matrici di matrici e matrici multidimensionali.It is possible to mix jagged and multidimensional arrays. Di seguito sono riportate la dichiarazione e l'inizializzazione di una matrice di matrici unidimensionale che contiene tre elementi matrice bidimensionali con dimensioni diverse.The following is a declaration and initialization of a single-dimensional jagged array that contains three two-dimensional array elements of different sizes. Per altre informazioni sulle matrici bidimensionali, vedere Matrici multidimensionali.For more information about two-dimensional arrays, see Multidimensional Arrays.

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

È possibile accedere a singoli elementi, come illustrato in questo esempio, in cui viene visualizzato il valore dell'elemento [1,0] della prima matrice (valore 5):You can access individual elements as shown in this example, which displays the value of the element [1,0] of the first array (value 5):

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

Il metodo Length restituisce il numero di matrici contenute nella matrice di matrici.The method Length returns the number of arrays contained in the jagged array. Si supponga, ad esempio, che sia stata dichiarata la matrice precedente. In questo caso, la rigaFor example, assuming you have declared the previous array, this line:

System.Console.WriteLine(jaggedArray4.Length);

restituisce il valore 3.returns a value of 3.

EsempioExample

In questo esempio viene compilata una matrice i cui elementi sono costituiti da matrici.This example builds an array whose elements are themselves arrays. Ogni elemento della matrice ha una dimensione diversa.Each one of the array elements has a different size.

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

Vedere ancheSee Also