Condividi tramite


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#)

Introduzione ai generics (Guida per programmatori C#)

Array