Quando sono presenti variabili dello stesso tipo, puoi raccoglierle in un array. Un array è un tipo di contenitore in cui si specifica il tipo degli elementi con []type, ad esempio []float. Un array è utile perché viene ridimensionato in base al numero di elementi memorizzati in esso contenuti senza modificare il codice per l'accesso agli elementi.
Ad esempio, se hai più giocatori nel tuo gioco, puoi creare un array e inizializzarlo con tutti i giocatori.
Players : []player = array{Player1, Player2}Verse segue un pattern in cui la modalità di definizione riflette quella di utilizzo. Questo principio si applica anche alla definizione e all'uso di un array.
Lunghezza array
È possibile ottenere il numero di elementi in un array accedendo al membro Length sull'array. Ad esempio, array{10, 20, 30}.Length restituisce 3.
Accesso agli elementi di un array
Gli elementi in un array sono ordinati nella stessa posizione nell'array in cui sono stati inseriti ed è possibile accedere all'elemento in tale posizione, chiamato indice, nell'array. Ad esempio, per ottenere il primo giocatore, è necessario accedere all'array Giocatori con Players[0].
Il primo elemento di un array ha un indice pari a 0 e l'indice di ogni elemento successivo aumenta di numero. Ad esempio, array{10, 20, 30}[0] è 10 e array{10, 20, 30}[1] è 20.
Indice | 0 | 1 | 2 |
Elemento | 10 | 20 | 30 |
L'ultimo indice in un array è inferiore alla lunghezza dell'array. Ad esempio, array{10, 20, 30}.Length è 3 e l'indice per 30 in array{10, 20, 30} è 2.
L'accesso a un elemento in un array è un'espressione fallibile e si può utilizzare soltanto in un contesto di fallimento, ad esempio un'espressione if. Ad esempio:
ExampleArray : []int = array{10, 20, 30, 40, 50}
for (Index := 0..ExampleArray.Length - 1):
if (Element := ExampleArray[Index]):
Print("{Element} in ExampleArray at index {Index}")Il codice stamperà:
10 in ExampleArray at index 0
20 in ExampleArray at index 1
30 in ExampleArray at index 2
40 in ExampleArray at index 3
50 in ExampleArray at index 4Modifica di un array e dei suoi elementi
Gli array, come tutti gli altri valori in Verse, sono elementi non modificabili. Se si definisce una variabile di array, è possibile assegnare un nuovo array alla variabile o modificare singoli elementi.
Ad esempio:
# Array1 is an array of integers
Array1 : []int = array{10, 11, 12}
# Array2 is an array variable of integers
var Array2 : []int = array{20, 21, 22}
# we concatenate Array1, Array2, and a new array of integers
# and assign that to the Array2 variable
set Array2 = Array1 + Array2 + array{30, 31}
Il codice stamperà:
10 at index 0
77 at index 1
12 at index 2
20 at index 3
21 at index 4
22 at index 5
30 at index 6
31 at index 7Array multidimensionali
Gli array negli esempi precedenti erano tutti unidimensionali, ma è anche possibile creare array multidimensionali. Gli array multidimensionali dispongono di un altro array, o più array, memorizzato in ogni indice, simile a colonne e righe in una tabella.
Ad esempio, il codice seguente produce un array bidimensionale (2D), visualizzato nella tabella seguente:
var Counter : int = 0
Example : [][]int =
for (Row := 0..3):
for(Column := 0..2):
set Counter += 1| Colonna 0 | Colonna 1 | Colonna 2 | |
|---|---|---|---|
Riga 0 | 1 | 2 | 3 |
Riga 1 | 4 | 5 | 6 |
Riga 2 | 7 | 8 | 9 |
Riga 3 | 10 | 11 | 12 |
Per accedere agli elementi in un array 2D, è necessario utilizzare due indici. Ad esempio, Example[0][0] è 1, Example[0][1] è 2 e Example[1][0] è 4.
Nel codice riportato di seguito viene illustrato come utilizzare un'espressione for per eseguire l'iterazione nell'array 2D Example.
if (NumberOfColumns : int = Example[0].Length):
for(Row := 0..Example.Length-1, Column := 0..NumberOfColumns):
if (Element := Example[Row][Column]):
Print("{Element} at index [{Row}][{Column}]")Il codice stamperà:
1 at index [0][0]
2 at index [0][1]
3 at index [0][2]
4 at index [1][0]
5 at index [1][1]
6 at index [1][2]
7 at index [2][0]
8 at index [2][1]
9 at index [2][2]
10 at index [3][0]
Non è necessario che il numero di colonne in ogni riga sia costante.
Ad esempio, il codice seguente produce un array bidimensionale (2D), visualizzato nella tabella seguente, in cui il numero di colonne in ogni riga è maggiore della riga precedente:
Example : [][]int =
for (Row := 0..3):
for(Column := 0..Row):
Row * Column| Colonna 0 | Colonna 1 | Colonna 2 | Colonna 3 | |
|---|---|---|---|---|
Riga 0 | 0 | |||
Riga 1 | 0 | 1 | ||
Riga 2 | 0 | 2 | 4 | |
Riga 3 | 0 | 3 | 6 | 9 |
Tipo persistente
Un array è persistente se il tipo di elementi nell'array è persistente, il che significa che è possibile utilizzarlo nelle variabili weak_map con ambito modulo e fare in modo che i relativi valori vengano mantenuti tra le sessioni di gioco. Per maggiori dettagli sulla persistenza in Verse, consulta Utilizzo dei dati persistenti in Verse.