Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Le matrici sono insiemi ordinati di elementi dello stesso tipo di dati a cui è possibile accedere utilizzando il nome della matrice insieme all'offset dall'inizio della matrice dell'elemento desiderato. Esistono alcune differenze importanti nel modo in cui vengono dichiarate e utilizzate le matrici in C# rispetto a Java.
Matrice unidimensionale
In una matrice unidimensionale viene archiviato un numero fisso di elementi in modo lineare. È sufficiente pertanto il solo valore di indice per individuare un elemento. In C# le parentesi quadre nella dichiarazione della matrice devono seguire il tipo di dati e non possono essere inserite dopo il nome della variabile, operazione consentita in Java. Una matrice di tipo integers pertanto viene dichiarata utilizzando la sintassi riportata di seguito:
int[] arr1;
La dichiarazione riportata di seguito non è valida in C#:
//int arr2[]; //compile error
Dopo aver dichiarato una matrice, è necessario utilizzare la parola chiave new per impostarne la dimensione, come in Java. Nel codice riportato di seguito viene dichiarato il riferimento alla matrice:
int[] arr;
arr = new int[5]; // create a 5 element integer array
È quindi possibile utilizzare la stessa sintassi di Java per accedere agli elementi di una matrice unidimensionale. Anche gli indici di matrice C# sono in base zero. Per accedere all'ultimo elemento della matrice precedente, utilizzare la sintassi riportata di seguito:
System.Console.WriteLine(arr[4]); // access the 5th element
Inizializzazione
Gli elementi delle matrici C# possono essere inizializzati al momento della creazione utilizzando la stessa sintassi di Java:
int[] arr2Lines;
arr2Lines = new int[5] {1, 2, 3, 4, 5};
Diversamente da Java, il numero degli inizializzatori C# deve corrispondere esattamente alla dimensione della matrice. È possibile utilizzare questa funzionalità per dichiarare e inizializzare una matrice C# su una sola riga:
int[] arr1Line = {1, 2, 3, 4, 5};
Questa sintassi consente di creare una matrice di dimensioni uguali al numero degli inizializzatori.
Inizializzazione in un ciclo di programma
L'altro modo per inizializzare una matrice in C# consiste nell'utilizzare il ciclo for. Il ciclo riportato di seguito consente di impostare su zero ciascun elemento di una matrice:
int[] TaxRates = new int[5];
for (int i=0; i<TaxRates.Length; i++)
{
TaxRates[i] = 0;
}
Matrici irregolari
Sia C# che Java supportano la creazione di matrici irregolari, o non rettangolari, in cui ogni riga contiene un diverso numero di colonne. Ad esempio, la matrice irregolare riportata di seguito ha quattro voci nella prima riga e tre nella seconda:
int[][] jaggedArray = new int[2][];
jaggedArray[0] = new int[4];
jaggedArray[1] = new int[3];
Matrici multidimensionali
Con C# è possibile creare matrici multidimensionali regolari simili a una matrice di valori dello stesso tipo. Mentre le matrici irregolari sono supportate sia da Java che da C#, in C# sono supportate anche le matrici multidimensionali, o matrici di matrici.
Per dichiarare una matrice rettangolare multidimensionale, utilizzare la sintassi riportata di seguito:
int[,] arr2D; // declare the array reference
float[,,,] arr4D; // declare the array reference
Dopo aver dichiarato la matrice, è possibile allocarle memoria come illustrato di seguito:
arr2D = new int[5,4]; // allocate space for 5 x 4 integers
Per accedere agli elementi della matrice, utilizzare la sintassi riportata di seguito:
arr2D[4,3] = 906;
Poiché le matrici sono in base zero, questa riga imposta l'elemento della quinta colonna della quarta riga su 906.
Inizializzazione
Le matrici multidimensionali possono essere create, configurate e inizializzate in un'unica istruzione utilizzando uno dei modi riportati di seguito:
int[,] arr4 = new int [2,3] { {1,2,3}, {4,5,6} };
int[,] arr5 = new int [,] { {1,2,3}, {4,5,6} };
int[,] arr6 = { {1,2,3}, {4,5,6} };
Inizializzazione in un ciclo di programma
Tutti gli elementi di una matrice possono essere inizializzati utilizzando un ciclo nidificato, come illustrato di seguito:
int[,] arr7 = new int[5,4];
for(int i=0; i<5; i++)
{
for(int j=0; i<4; j++)
{
arr7[i,j] = 0; // initialize each element to zero
}
}
Classe System.Array
In .NET Framework le matrici vengono implementate come istanze della classe Array. Questa classe fornisce numerosi metodi utili, tra cui Sort e Reverse.
Nell'esempio riportato di seguito viene illustrato come sia facile utilizzare questi metodi. Innanzitutto, si effettua l'inversione degli elementi di una matrice con il metodo Reverse, quindi li si ordina con il metodo Sort:
class ArrayMethods
{
static void Main()
{
// Create a string array of size 5:
string[] employeeNames = new string[5];
// Read 5 employee names from user:
System.Console.WriteLine("Enter five employee names:");
for(int i=0; i<employeeNames.Length; i++)
{
employeeNames[i]= System.Console.ReadLine();
}
// Print the array in original order:
System.Console.WriteLine("\nArray in Original Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
// Reverse the array:
System.Array.Reverse(employeeNames);
// Print the array in reverse order:
System.Console.WriteLine("\n\nArray in Reverse Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
// Sort the array:
System.Array.Sort(employeeNames);
// Print the array in sorted order:
System.Console.WriteLine("\n\nArray in Sorted Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
}
}
Output
Enter five employee names:
Luca
Angie
Brian
Kent
Beatriz
Array in Original Order:
Luca Angie Brian Kent Beatriz
Array in Reverse Order:
Beatriz Kent Brian Angie Luca
Array in Sorted Order:
Angie Beatriz Brian Kent Luca
Vedere anche
Concetti
Riferimenti
Matrici (Guida per programmatori C#)