Esercizio - Introduzione ai concetti di base delle matrici
- 19 minuti
Le matrici possono essere usate per archiviare più valori dello stesso tipo in una singola variabile. I valori archiviati in una matrice sono in genere correlati. Ad esempio, un elenco di nomi di studenti potrebbe essere archiviato in una matrice di stringhe denominata students.
Il tuo lavoro nel reparto di sicurezza è incentrato sulla ricerca di un modello per gli ordini fraudolenti. Si vuole che il codice esamini gli ordini dei clienti precedenti e identifichi i marcatori associati agli ordini fraudolenti. L'azienda spera che questi marcatori possano essere usati per identificare potenziali ordini di acquisto fraudolenti in futuro prima che vengano elaborati. Dato che non sempre è nota in anticipo la quantità di ordini che sarà necessario esaminare, non è possibile creare singole variabili in cui inserire ogni ID di ordine. Come è possibile creare una struttura di dati in grado di contenere più valori correlati?
In questo esercizio si usano matrici per archiviare e analizzare una raccolta di ID di ordine.
Che cos'è una matrice?
Una matrice è una raccolta di singoli elementi dati accessibili tramite un singolo nome di variabile. Per accedere a ogni elemento di una matrice, si usa un indice numerico in base zero. Le matrici consentono di creare una raccolta di valori di dati che condividono uno scopo comune o caratteristiche con un singolo nome di variabile per semplificare l'elaborazione.
Dichiarazione di matrici e accesso agli elementi della matrice
Una matrice è un tipo speciale di variabile che può contenere più valori dello stesso tipo di dati. La sintassi di dichiarazione è leggermente diversa per una matrice perché è necessario specificare sia il tipo di dati che la dimensione della matrice.
Preparare l'ambiente di scrittura del codice
Questo modulo include attività che guidano l'utente attraverso il processo di compilazione ed esecuzione di un codice di esempio. È consigliabile completare queste attività usando Visual Studio Code come ambiente di sviluppo. L'uso di Visual Studio Code per queste attività consente di acquisire familiarità nella scrittura e nell'esecuzione del codice in un ambiente di sviluppo usato da professionisti di tutto il mondo.
Aprire Visual Studio Code.
Per aprire Visual Studio Code è possibile usare il menu Start di Windows (o una risorsa equivalente per un altro sistema operativo).
Nel menu File di Visual Studio Code selezionare Apri cartella.
Nella finestra di dialogo Apri cartella passare alla cartella Desktop di Windows.
Se si usa un percorso di cartella diverso per conservare i progetti di codice, è possibile usare tale percorso. Per questo training, è importante che il percorso sia facile da individuare e da ricordare.
Nella finestra di dialogo Apri cartella, selezionare Seleziona cartella.
Se viene visualizzata una finestra di dialogo di sicurezza che chiede se si considerano attendibili gli autori, selezionare Sì.
Nel menu Terminale di Visual Studio Code selezionare Nuovo terminale.
Si noti che in un prompt dei comandi nel pannello Terminale viene visualizzato il percorso della cartella corrente. Ad esempio:
C:\Users\someuser\Desktop>Nota
Se si usa il proprio PC anziché un ambiente sandbox o ospitato e sono stati completati altri moduli di Microsoft Learn in questa serie dedicata a C#, potrebbe essere già stata creata una cartella di progetto per gli esempi di codice. In tal caso, è possibile ignorare il passaggio successivo, usato per creare un'app console nella cartella TestProject.
Al prompt dei comandi del terminale, per creare una nuova applicazione console in una cartella specificata, immettere il prompt seguente:
dotnet new console -o ./CsharpProjects/TestProjectQuesto comando dell'interfaccia della riga di comando .NET usa un modello di programma .NET per creare un nuovo progetto di applicazione console C# nel percorso di cartella specificato. Il comando crea le cartelle CsharpProjects e TestProject e usa TestProject come nome del file
.csproj.Se viene visualizzato un messaggio che indica che i file esistono già, continuare con i passaggi successivi. I file di progetto esistenti verranno riutilizzati.
Nella visualizzazione EXPLORER espandere la cartella CsharpProjects .
Verranno visualizzati la cartella TestProject e due file, un file di programma C# denominato Program.cs e un file di progetto C# denominato TestProject.csproj.
Nel menu File di Visual Studio Code selezionare Apri cartella.
Nella finestra di dialogo Apri cartella selezionare la cartella CsharpProjects e quindi selezionare Seleziona cartella.
Nella visualizzazione EXPLORER espandere la cartella TestProject e quindi selezionare Program.cs.
Eliminare le righe di codice esistenti.
Questo progetto console C# verrà usato per creare, compilare ed eseguire esempi di codice durante questo modulo.
Chiudere il pannello Terminale.
Dichiarare una nuova matrice
Per dichiarare una nuova matrice di stringhe che può contenere tre elementi, immettere il codice seguente:
string[] fraudulentOrderIDs = new string[3];Soffermarsi qualche istante a esaminare il codice.
L'operatore
newcrea una nuova istanza di una matrice nella memoria del computer che può contenere tre valori stringa. Per altre informazioni sulla parola chiavenew, vedere il modulo "Chiamare i metodi dalla libreria di classi .NET usando C#".Si noti che il primo set di parentesi quadre
[]indica semplicemente al compilatore che la variabile denominatafraudulentOrderIDsè una matrice, ma il secondo set di parentesi quadre[3]indica il numero di elementi che può contenere la matrice.Nota
Questo esempio dimostra come dichiarare una matrice di stringhe, ma è possibile creare matrici con ogni tipo di dati, incluse primitive come
intebool, nonché tipi di dati più complessi, come le classi. In questo esempio vengono usate per semplicità le stringhe per agevolare l'apprendimento nella fase iniziale.
Assegnare valori agli elementi di una matrice
A questo punto, è stata dichiarata una matrice di stringhe, ma ogni elemento della matrice è vuoto. Per accedere a un elemento di una matrice, è possibile usare un indice numerico in base zero racchiuso tra parentesi quadre. È possibile assegnare un valore a un elemento di matrice usando = come se fosse una variabile regolare.
Per assegnare i valori degli ID di ordine alla matrice
fraudulentOrderIDs, aggiornare il codice come indicato di seguito:string[] fraudulentOrderIDs = new string[3]; fraudulentOrderIDs[0] = "A123"; fraudulentOrderIDs[1] = "B456"; fraudulentOrderIDs[2] = "C789";Soffermarsi qualche istante a esaminare il codice.
Si noti che si usa il nome della matrice per accedere ai suoi elementi. È possibile accedere singolarmente a ogni elemento specificando il numero di indice in base zero all'interno di parentesi quadre.
Poiché la matrice viene dichiarata come stringa, anche i valori assegnati devono essere stringhe. In questo scenario si assegnano gli ID degli ordini agli elementi della matrice.
Provare a usare un indice non compreso nei limiti della matrice
Anche se potrebbe non sembrare intuitivo inizialmente, è importante ricordare che il numero di elementi nella matrice viene dichiarato. Si accede tuttavia a ogni elemento della matrice a partire da zero. Per accedere al secondo elemento nella matrice, quindi, si usa l'indice 1.
È normale che i principianti dimentichino che le matrici sono in base zero e che tentino di accedere a un elemento della matrice che non esiste. Se si commette questo errore, si verifica un'eccezione di runtime che informa che si è tentato di accedere a un elemento non compreso entro i limiti della matrice.
Per causare intenzionalmente un errore nell'applicazione, tentare di accedere a un quarto elemento della matrice usando il valore di indice 3.
Nella parte inferiore del file di codice immettere la riga di codice seguente:
fraudulentOrderIDs[3] = "D000";Assicurarsi che il codice corrisponda a questo esempio:
string[] fraudulentOrderIDs = new string[3]; fraudulentOrderIDs[0] = "A123"; fraudulentOrderIDs[1] = "B456"; fraudulentOrderIDs[2] = "C789"; fraudulentOrderIDs[3] = "D000";Nel menu File di Visual Studio Code selezionare Salva.
Nella visualizzazione EXPLORER, per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject e quindi scegliere Apri nel terminale integrato.
Dovrebbe aprirsi un pannello del terminale con un prompt dei comandi che indica che il terminale è aperto nella posizione della cartella TestProject.
Al prompt dei comandi del terminale, per compilare il codice, digitare
dotnet builde quindi premere INVIO.Verrà visualizzato il messaggio seguente:
Build succeeded. 0 Warning(s) 0 Error(s)Al prompt dei comandi del terminale, per eseguire il codice, digitare
dotnet rune quindi premere INVIO.Quando si esegue l'app, viene visualizzato il seguente messaggio di errore di runtime:
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array. at Program.<Main>$(String[] args) in C:\Users\someuser\Desktop\CsharpProjects\TestProject\Program.cs:line 6Si notino le parti seguenti dell'errore:
- Messaggio di errore:
System.IndexOutOfRangeException: Index was outside the bounds of the array. - Posizione dell'errore:
Program.cs:line 6
- Messaggio di errore:
Impostare come commento la riga che ha generato l'errore di runtime.
// fraudulentOrderIDs[3] = "D000";
Si è visto come assegnare un valore a un elemento della matrice. Ora si vedrà come accedere a un valore archiviato in un elemento della matrice.
Recuperare i valori dagli elementi di una matrice
L'accesso al valore di un elemento della matrice funziona come l'assegnazione di un valore a un elemento della matrice. È sufficiente specificare l'indice dell'elemento di cui si vuole recuperare il valore.
Per scrivere il valore di ogni ID di ordine fraudolento, aggiornare il codice come indicato di seguito:
string[] fraudulentOrderIDs = new string[3]; fraudulentOrderIDs[0] = "A123"; fraudulentOrderIDs[1] = "B456"; fraudulentOrderIDs[2] = "C789"; // fraudulentOrderIDs[3] = "D000"; Console.WriteLine($"First: {fraudulentOrderIDs[0]}"); Console.WriteLine($"Second: {fraudulentOrderIDs[1]}"); Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");Nel menu File di Visual Studio Code selezionare Salva.
Nella visualizzazione EXPLORER, per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject e quindi scegliere Apri nel terminale integrato.
Al prompt dei comandi del terminale digitare
dotnet rune quindi premere INVIO.Verrà visualizzato il messaggio seguente:
First: A123 Second: B456 Third: C789
Riassegnare il valore di una matrice
Gli elementi di una matrice sono come qualsiasi altro valore di variabile. È possibile assegnare, recuperare e riassegnare un valore a ogni elemento della matrice.
Alla fine del file di codice, per riassegnare e quindi stampare il valore del primo elemento della matrice, immettere il codice seguente:
fraudulentOrderIDs[0] = "F000"; Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");Assicurarsi che il codice corrisponda all'esempio seguente:
string[] fraudulentOrderIDs = new string[3]; fraudulentOrderIDs[0] = "A123"; fraudulentOrderIDs[1] = "B456"; fraudulentOrderIDs[2] = "C789"; // fraudulentOrderIDs[3] = "D000"; Console.WriteLine($"First: {fraudulentOrderIDs[0]}"); Console.WriteLine($"Second: {fraudulentOrderIDs[1]}"); Console.WriteLine($"Third: {fraudulentOrderIDs[2]}"); fraudulentOrderIDs[0] = "F000"; Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");Nel menu File di Visual Studio Code selezionare Salva.
Nella visualizzazione EXPLORER, per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject e quindi scegliere Apri nel terminale integrato.
Al prompt dei comandi del terminale digitare
dotnet rune quindi premere INVIO.Verrà visualizzato il messaggio seguente:
First: A123 Second: B456 Third: C789 Reassign First: F000
Inizializzare una matrice
È possibile inizializzare una matrice durante la dichiarazione esattamente come si farebbe con una variabile regolare.
Impostare come commento le righe in cui si dichiara la variabile
fraudulentOrderIDs.È possibile usare un commento su più righe (
/* ... */) per impostare come commento la dichiarazione difraudulentOrderIDse le righe usate per assegnare valori agli elementi della matrice.Per dichiarare la matrice e inizializzare i valori in una singola istruzione, immettere il codice seguente:
string[] fraudulentOrderIDs = [ "A123", "B456", "C789" ];Questo esempio usa la sintassi dell'espressione Collection , introdotta in C# 12 ed è supportata in .NET 10.
È anche possibile che venga visualizzata una sintassi precedente usata per inizializzare una matrice.
string[] fraudulentOrderIDs = { "A123", "B456", "C789" };Si noti che questa sintassi precedente usa parentesi graffe
{}per racchiudere i valori della matrice. Entrambe le sintassi sono valide.Nota
È possibile che venga visualizzata una combinazione della sintassi precedente e della sintassi dell'espressione Collection usata in questo training.
Assicurarsi che il codice corrisponda all'esempio seguente:
/* string[] fraudulentOrderIDs = new string[3]; fraudulentOrderIDs[0] = "A123"; fraudulentOrderIDs[1] = "B456"; fraudulentOrderIDs[2] = "C789"; // fraudulentOrderIDs[3] = "D000"; */ string[] fraudulentOrderIDs = [ "A123", "B456", "C789" ]; Console.WriteLine($"First: {fraudulentOrderIDs[0]}"); Console.WriteLine($"Second: {fraudulentOrderIDs[1]}"); Console.WriteLine($"Third: {fraudulentOrderIDs[2]}"); fraudulentOrderIDs[0] = "F000"; Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");Soffermarsi qualche istante a esaminare l'istruzione di dichiarazione.
Si noti che questa sintassi è sia compatta che facile da leggere. Quando si esegue l'applicazione, l'output non dovrebbe cambiare.
Nel menu File di Visual Studio Code selezionare Salva.
Nella visualizzazione EXPLORER, per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject e quindi scegliere Apri nel terminale integrato.
Al prompt dei comandi del terminale digitare
dotnet rune quindi premere INVIO.Dovrebbe essere visualizzato lo stesso messaggio di prima:
First: A123 Second: B456 Third: C789 Reassign First: F000
Usare la proprietà Length di una matrice
A seconda della modalità di creazione della matrice, è possibile che non si conosca in anticipo il numero di elementi in essa contenuti. Per determinare le dimensioni di una matrice, è possibile usare la proprietà Length.
Nota
La proprietà Length di una matrice non è basata su zero.
Alla fine del file di codice immettere il codice seguente per restituire il numero di ordini fraudolenti:
Console.WriteLine($"There are {fraudulentOrderIDs.Length} fraudulent orders to process.");Questo codice usa la proprietà
Lengthdella matrice, un numero intero, per restituire il numero di elementi nella matricefraudulentOrderIDs.Assicurarsi che il codice corrisponda a questo esempio:
/* string[] fraudulentOrderIDs = new string[3]; fraudulentOrderIDs[0] = "A123"; fraudulentOrderIDs[1] = "B456"; fraudulentOrderIDs[2] = "C789"; // fraudulentOrderIDs[3] = "D000"; */ string[] fraudulentOrderIDs = [ "A123", "B456", "C789" ]; Console.WriteLine($"First: {fraudulentOrderIDs[0]}"); Console.WriteLine($"Second: {fraudulentOrderIDs[1]}"); Console.WriteLine($"Third: {fraudulentOrderIDs[2]}"); fraudulentOrderIDs[0] = "F000"; Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}"); Console.WriteLine($"There are {fraudulentOrderIDs.Length} fraudulent orders to process.");Salvare le modifiche apportate al file Program.cs e quindi eseguire l'applicazione.
Verrà visualizzato l'output seguente:
First: A123 Second: B456 Third: C789 Reassign First: F000 There are 3 fraudulent orders to process.
Riepilogo
Ecco gli aspetti più importanti da ricordare quando si lavora con le matrici:
- Una matrice è una variabile speciale che contiene una raccolta di elementi dati correlati.
- È necessario memorizzare il formato di base di una dichiarazione di variabile di matrice.
- Accedere a ogni elemento di una matrice per impostare o ottenere i valori usando un indice in base zero racchiuso tra parentesi quadre.
- Se si tenta di accedere a un indice non compreso entro i limiti della matrice, viene restituita un'eccezione in fase di esecuzione.
- La proprietà
Lengthoffre un modo programmatico per determinare il numero di elementi in una matrice.