Matrici e insiemi (Visual C# Express)
Aggiornamento: novembre 2007
L'archiviazione di gruppi di elementi correlati di dati è un requisito di base della maggior parte delle applicazioni. A tale scopo è possibile utilizzare principalmente matrici e insiemi.
Matrici
La matrici sono insiemi di oggetti dello stesso tipo. Dal momento che le matrici possono essere quasi di qualsiasi lunghezza, possono essere utilizzate per archiviare migliaia o persino milioni di oggetti, tuttavia le dimensioni devono essere decise durante la creazione della matrice stessa. Per l'accesso a ciascun elemento della matrice viene utilizzato un indice, corrispondente a un numero che indica la posizione o lo slot in cui l'oggetto è archiviato nella matrice. È possibile utilizzare le matrici per archiviare sia tipi di riferimento che tipi di valore.
Matrici unidimensionali
Una matrice è un insieme indicizzato di oggetti. Una matrice unidimensionale di oggetti viene dichiarata nel modo seguente:
type[] arrayName;
Spesso gli elementi contenuti nella matrice vengono inizializzati contemporaneamente, nel modo seguente:
int[] array = new int[5];
Il valore predefinito di elementi numerici della matrice è zero, mentre il valore predefinito degli elementi di riferimento è null, tuttavia è possibile inizializzare valori durante la creazione della matrice, come descritto di seguito:
int[] array1 = new int[] { 1, 3, 5, 7, 9 };
O anche nel modo seguente:
int[] array2 = {1, 3, 5, 7, 9};
Le matrici utilizzano indici in base zero in modo che il primo elemento nella matrice sia l'elemento 0.
string[] days = {"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"};
System.Console.WriteLine(days[0]); // Outputs "Sun"
Matrici multidimensionali
Dal punto di vista concettuale, una matrice multidimensionale con due dimensioni è simile a una griglia. Una matrice multidimensionale con tre dimensioni è simile a un cubo.
// declare multidimension array (two dimensions)
int[,] array2D = new int[2,3];
// declare and initialize multidimension array
int[,] array2D2 = { {1, 2, 3}, {4, 5, 6} };
// write elements in a multidimensional array
for (int i=0; i<2; i++)
{
for (int j=0; j<3; j++)
{
array2D[i,j] = (i + 1) * (j + 1);
}
}
// read elements in a multidimensional array
for (int i=0; i<2; i++)
{
for (int j=0; j<3; j++)
{
System.Console.Write(array2D[i,j]);
}
System.Console.WriteLine();
}
Matrici irregolari
Una variazione della matrice multidimensionale è una matrice irregolare, ovvero una matrice di matrici. Una matrice irregolare è una matrice unidimensionale in cui ogni elemento è a sua volta una matrice. Non è necessario che le matrici di elementi siano tutte della stessa dimensione.
Una matrice irregolare viene dichiarata nel modo seguente:
int[][] jaggedArray = new int[3][];
Questa operazione crea una matrice di tre matrici. Tali matrici possono essere inizializzate nel modo seguente:
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];
Utilizzando l'istruzione foreach
L'istruzione foreach viene spesso utilizzata per accedere a ogni elemento archiviato in una matrice:
int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };
foreach (int i in numbers)
{
System.Console.Write("{0} ", i);
}
//Output: 4 5 6 1 2 3 -2 -1 0
Matrici di oggetti
La creazione di una matrice di oggetti, anziché di una matrice di semplici tipi di dati, ad esempio numeri interi, è un processo in due fasi. Innanzitutto si dichiara la matrice, quindi è necessario creare gli oggetti archiviati nella matrice. In questo esempio viene creata una classe che definisce un CD audio. In seguito viene creata una matrice che archivia 20 CD audio.
namespace CDCollection
{
// Define a CD type.
class CD
{
private string album;
private string artist;
private int rating;
public string Album
{
get {return album;}
set {album = value;}
}
public string Artist
{
get {return artist;}
set {artist = value;}
}
public int Rating
{
get {return rating;}
set {rating = value;}
}
}
class Program
{
static void Main(string[] args)
{
// Create the array to store the CDs.
CD[] cdLibrary = new CD[20];
// Populate the CD library with CD objects.
for (int i=0; i<20; i++)
{
cdLibrary[i] = new CD();
}
// Assign details to the first album.
cdLibrary[0].Album = "See";
cdLibrary[0].Artist = "The Sharp Band";
cdLibrary[0].Rating = 10;
}
}
}
Insiemi
Una matrice costituisce solo una delle numerose opzioni disponibili per l'archiviazione di insiemi di dati utilizzando il linguaggio C#. L'opzione selezionata dipende da diversi fattori, quali la modalità di modifica o di accesso agli elementi. Ad esempio, un elenco è in genere più rapido di una matrice se è necessario inserire elementi all'inizio o nella parte centrale dell'insieme. Altri tipi di classi Collection includono map, tree e stack, ciascuno dei quali presenta vantaggi specifici. Per ulteriori informazioni, vedere System.Collections e System.Collections.Generic.
Nell'esempio seguente viene illustrato come utilizzare la classe List<T>. Si noti che, a differenza della classe Array, è possibile inserire elementi nella parte centrale dell'elenco. In questo esempio gli elementi dell'elenco sono limitati in modo da corrispondere solo a stringhe.
public class TestCollections
{
public static void TestList()
{
System.Collections.Generic.List<string> sandwich = new System.Collections.Generic.List<string>();
sandwich.Add("bacon");
sandwich.Add("tomato");
sandwich.Insert(1, "lettuce");
foreach (string ingredient in sandwich)
{
System.Console.WriteLine(ingredient);
}
}
}
Vedere anche
Attività
Procedura: dichiarare una matrice (Visual C#)
Procedura: passare matrici di oggetti ai metodi (Visual C#)
Procedura: scorrere una matrice (Visual C#)
Procedura: inizializzare una matrice (Visual C#)
Procedura: scorrere un insieme (Visual C#)
Concetti
Nozioni di base del linguaggio C#
Riferimenti
Matrici (Guida per programmatori C#)
Classi di insiemi (Guida per programmatori C#)