Array multidimensionali con numero indeterminato di elementi: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| (29 versioni intermedie di uno stesso utente non sono mostrate) | |||
| Riga 1: | Riga 1: | ||
In Gambas vi sono ''Array'' (vettori) che non hanno un numero determinato degli ''elementi'' appartenenti alle | In Gambas vi sono anche ''Array'' (vettori) che non hanno un numero determinato degli ''elementi'' appartenenti alle loro dimensioni. | ||
==Dichiarazione di un array multidimensionale di numero non definito di elementi== | ==Dichiarazione di un array multidimensionale di numero non definito di elementi== | ||
L'array a numero non-determinato di elementi può definire due o più livelli di array. | |||
<BR>Il primo livello è costituito da due o più array monodimensionali; | |||
<BR>Il secondo livello contiene due o più array monodimensionali, ossia array di primo livello; | |||
<BR>Il terzo livello contiene due o più array di secondo livello, ossia array di array; | |||
<BR>e così via. | |||
Un array a due dimensioni di numero non definito di elementi, si dichiara | Così, ad esempio, in un array a ''due'' dimensioni la prima dimensione è costituita da due o più array monodimensionali contenenti i dati previsti dal tipo; la seconda dimensione contiene la predetta prima dimensione, ossia due o più elementi rappresentati dagli array monodimensionali. | ||
Dim arrArr As String<FONT color=red>[]</font><FONT color=blue>[]</font> <SUP>[[[#Note|nota 1]]]</sup> | |||
Un array a due dimensioni di numero non definito di elementi, si dichiara a seconda dei casi o con istanziazione ''esplicita'' (esempio di ''Array'' di tipo Stringa contenente ''Array'' di tipo Stringa): | |||
Dim arrArr As New String<FONT color=red>[]</font><FONT color=blue>[]</font> <SUP>[[[#Note|nota 1]]]</sup> | |||
oppure con istanziazione ''implicita'' (senza l'uso della parola-chiave ''NEW''): | |||
Dim arrArr As String<FONT color=red>[]</font><FONT color=blue>[]</font> | |||
===Istanziazione ''implicita'' con inizializzazione ''esplicita''=== | ===Istanziazione ''implicita'' con inizializzazione ''esplicita''=== | ||
La istanziazione ''implicita'' - con inizializzazione ''esplicita'' - di un array di numero non definito di elementi sarà effettuata così: | La istanziazione ''implicita'' - con inizializzazione ''esplicita'' - di un array di numero non definito di elementi sarà effettuata così: | ||
arrArr = <FONT color=red><B>[</b></font><FONT color=blue>[</font>"a", "b"<FONT color=blue>]</font>, <FONT color=blue>[</font>"c", "d"<FONT color=blue>]</font>, <FONT color=blue>[</font>"e", "f"<FONT color=blue>]</font><FONT color=red><B>]</b></font> | arrArr = <FONT color=red><B>[</b></font><FONT color=blue>[</font>"a", "b"<FONT color=blue>]</font>, <FONT color=blue>[</font>"c", "d"<FONT color=blue>]</font>, <FONT color=blue>[</font>"e", "f"<FONT color=blue>]</font><FONT color=red><B>]</b></font> | ||
Verificando, quindi, la quantità di elementi (che contengono array) presenti nel caso precedente all'interno della variabile array, si avrà il risultato di: 3 | Verificando, quindi, la quantità di elementi (che contengono array) presenti nel caso precedente all'interno della variabile array, si avrà il risultato di: 3 | ||
Public Sub Main() | |||
Dim arrArr As String[][] | Dim arrArr As String[][] | ||
arrArr = <FONT color=red><B>[</b></font><FONT color=blue>[</font>"a", "b"<FONT color=blue>]</font>, <FONT color=blue>[</font>"c", "d"<FONT color=blue>]</font>, <FONT color=blue>[</font>"e", "f"<FONT color=blue>]</font><FONT color=red><B>]</b></font> | |||
Print arrArr.Count | |||
End | |||
Per sapere la quantità di elementi contenuti in un elemento array della variabile array, è necessaria l'istanziazione ''esplicita'' dell'array mediante la parola-chiave ''New'': | Per sapere la quantità di elementi contenuti in un elemento array della variabile array, è necessaria l'istanziazione ''esplicita'' dell'array mediante la parola-chiave ''New'': | ||
Public Sub Main() | |||
Dim arrArr As New String[][] | Dim arrArr As New String[][] | ||
arrArr = <FONT color=red><B>[</b></font><FONT color=blue>[</font>"a", "b"<FONT color=blue>]</font>, <FONT color=blue>[</font>"c", "d"<FONT color=blue>]</font>, <FONT color=blue>[</font>"e", "f"<FONT color=blue>]</font><FONT color=red><B>]</b></font> | |||
<FONT color=gray>' ''Vogliamo sapere la quantità di elementi presenti nel 2° elemento (che è un array) della variabile array bidimensionale:''</font> | <FONT color=gray>' ''Vogliamo sapere la quantità di elementi presenti nel 2° elemento (che è un array) della variabile array bidimensionale:''</font> | ||
Print arrArr[1].Count | |||
End | |||
Il risultato sarà: 2. | Il risultato sarà: 2. | ||
===Vedere il contenuto di ciascun elemento=== | |||
Per vedere il contenuto di ciascun elemento: | Per vedere il contenuto di ciascun elemento: | ||
Public Sub Main() | |||
Dim arrArr As String[][] = <FONT color=red><B>[</b></font><FONT color=blue>[</font>"a", "b"<FONT color=blue>]</font>, <FONT color=blue>[</font>"c", "d"<FONT color=blue>]</font>, <FONT color=blue>[</font>"e", "f"<FONT color=blue>]</font><FONT color=red><B>]</b></font> | Dim arrArr As String[][] = <FONT color=red><B>[</b></font><FONT color=blue>[</font>"a", "b"<FONT color=blue>]</font>, <FONT color=blue>[</font>"c", "d"<FONT color=blue>]</font>, <FONT color=blue>[</font>"e", "f"<FONT color=blue>]</font><FONT color=red><B>]</b></font> | ||
Dim | Dim b As Byte | ||
For b = 0 To arrArr[0].Max | |||
Print arrArr[0][b], arrArr[1][b], arrArr[2][b] | |||
Next | |||
End | |||
===Eliminare un elemento di una dimensione=== | ===Eliminare un elemento di una dimensione=== | ||
Per eliminare un elemento di una dimensione dell'array: | Per eliminare un elemento di una dimensione dell'array: | ||
Public Sub Main() | |||
Dim arr As Integer[][] | Dim arr As Integer[][] | ||
| Riga 57: | Riga 63: | ||
arr = [[11, 111], [22, 222], [33, 333], [44, 444]] | arr = [[11, 111], [22, 222], [33, 333], [44, 444]] | ||
Print arr.Count | Print arr.Count | ||
<FONT Color=gray>' ''Viene eliminato interamente il 1° elemento della seconda dimensione (cioè l'array [11, 111]):</font> | |||
arr.Remove(0, 1) | arr.Remove(0, 1) | ||
Print arr.Count, arr[0][0] | Print arr.Count, arr[0][0] | ||
Print arr[2].Count, arr[2][1] | Print arr[2].Count, arr[2][1] | ||
<FONT Color=gray>' ''Viene eliminato il 2° elemento del corrente 3° elemento della seconda dimensione (cioè il valore 444):</font> | |||
arr[2].Remove(1, 1) | arr[2].Remove(1, 1) | ||
Print arr[2].Count | Print arr[2].Count | ||
<FONT Color=gray>' ''Qui verrà sollevato un errore, perché è stato rimosso il 2° elemento | <FONT Color=gray>' ''Qui verrà sollevato un errore, perché è stato rimosso il 2° elemento di quello che era diventato il 3° elemento della seconda dimensione:</font> | ||
Print arr[2][1] | Print arr[2][1] | ||
End | |||
==Rappresentazione delle dimensioni di un array multidimensionale di numero non definito di elementi== | ==Rappresentazione delle dimensioni di un array multidimensionale di numero non definito di elementi== | ||
Va dunque precisato che durante l'uso di una variabile di tipo array, | Va dunque precisato che durante l'uso di una variabile di tipo array, nella rappresentazione | ||
variabile[n][n] | variabile[n][n] | ||
il numero presente nelle prime parentesi quadre di variabile<FONT color=#B22222><B>[]</b></font><FONT color=gray>[]</font> individua l'elemento della | il numero presente nelle prime parentesi quadre di variabile<FONT color=#B22222><B>[]</b></font><FONT color=gray>[]</font> individua l'elemento della seconda dimensione della ''variabile[][]''. Il numero, invece, presente nelle altre due parentesi quadre di variabile<FONT color=gray>[]</font><FONT color=blue><B>[]</b></font> individua l'elemento della prima dimensione, ossia l'elemento dell'elemento della seconda dimensione. | ||
Pertanto, se abbiamo una variabile[][] (bidimensionale) così istanziata: | Pertanto, se abbiamo una variabile[][] (bidimensionale) così istanziata: | ||
| Riga 81: | Riga 87: | ||
ponendo: | ponendo: | ||
Print variabile[1][2] | Print variabile[1][2] | ||
con [1] è individuato il secondo elemento della | con [1] è individuato il secondo elemento della seconda dimensione, mentre con [2] è individuato il terzo elemento della prima dimensione (il predetto secondo elemento della seconda dimensione), ossia il valore 99: | ||
<FONT color=red><B>[</b></font><FONT Size=1>[11, 22, 33]</font>, <FONT color=blue><B>[</b></font>77, 88, <B>99</b><FONT color=blue><B>]</b></font><FONT color=red><B>]</b></font> | <FONT color=red><B>[</b></font><FONT Size=1>[11, 22, 33]</font>, <FONT color=blue><B>[</b></font>77, 88, <FONT color=green><B>99</b></font><FONT color=blue><B>]</b></font><FONT color=red><B>]</b></font> | ||
==Aggiungere elementi dinamicamente ad un array multidimensionale== | ==Aggiungere elementi dinamicamente ad un array multidimensionale== | ||
Se l'array bidimensionale non ha un numero definito dei suoi elementi, esso è un vettore ''dinamico'', ed è possibile aggiungere suoi elementi come segue: | Se l'array bidimensionale non ha un numero definito dei suoi elementi, esso è un vettore ''dinamico'', ed è possibile aggiungere suoi elementi come segue: | ||
Public Sub Main() | |||
Dim bb As New Byte[][] | Dim bb As New Byte[][] | ||
<FONT Color=gray>' ''Viene aggiunto un elemento (indice 0) alla | <FONT Color=gray>' ''Viene aggiunto un elemento (indice 0) alla seconda dimensione, nonché il 1° elemento con relativo valore al predetto nuovo elemento della seconda dimensione:''</font> | ||
bb.Push([1]) | bb.Push([1]) | ||
Print bb[0][0] | Print bb[0][0] | ||
<FONT Color=gray>' ''Viene aggiunto un altro elemento (indice 1) alla | <FONT Color=gray>' ''Viene aggiunto un altro elemento (indice 1) alla seconda dimensione, nonché il 1° elemento con relativo valore al predetto nuovo elemento della seconda dimensione:''</font> | ||
bb.Push([2]) | bb.Push([2]) | ||
Print bb[1][0] | Print bb[1][0] | ||
<FONT Color=gray>' ''Viene aggiunto un altro elemento (indice 2) alla | <FONT Color=gray>' ''Viene aggiunto un altro elemento (indice 2) alla seconda dimensione, nonché il 1° e il 2° elemento con relativi valori al predetto nuovo elemento della seconda dimensione:''</font> | ||
bb.Push([3, 33]) | bb.Push([3, 33]) | ||
Print bb[2][0], bb[2][1] | Print bb[2][0], bb[2][1] | ||
End | |||
Si sarà dunque costruito il seguente vettore bidimensionale: | Si sarà dunque costruito il seguente vettore bidimensionale: | ||
<FONT color=red><B>[</b></font> <FONT color=blue><B>[</b></font>1<FONT color=blue><B>]</b></font>, <FONT color=blue><B>[</b></font>2<FONT color=blue><B>]</b></font>, <FONT color=blue><B>[</b></font>3, 33<FONT color=blue><B>]</b></font> <FONT color=red><B>]</b></font> | <FONT color=red><B>[</b></font> <FONT color=blue><B>[</b></font>1<FONT color=blue><B>]</b></font>, <FONT color=blue><B>[</b></font>2<FONT color=blue><B>]</b></font>, <FONT color=blue><B>[</b></font>3, 33<FONT color=blue><B>]</b></font> <FONT color=red><B>]</b></font> | ||
Come si nota, la | Come si nota, la seconda dimensione dell'array (quella compresa tra le parentesi quadre rosse) contiene tre elementi (ciascuno compreso da parentesi quadre blu), i quali - rappresentando la prima dimensione - contengono uno o due elementi. | ||
Oppure: | |||
Public Sub Main() | |||
Dim bb As New Byte[][] | Dim bb As New Byte[][] | ||
<FONT Color=gray>' ''Viene aggiunto il 1° elemento della | <FONT Color=gray>' ''Viene aggiunto il 1° elemento della seconda dimensione:''</font> | ||
<FONT Color=#B22222>bb.Push([])</font> | |||
<FONT Color=gray>' ''Vengono aggiunti degli elementi al nuovo 1° elemento della | <FONT Color=gray>' ''Vengono aggiunti degli elementi al nuovo 1° elemento (prima dimensione) della seconda dimensione:''</font> | ||
bb[0].Push(10) | |||
bb[0].Push(11) | |||
Print bb[0][0] | |||
Print bb[0][1] | |||
<FONT Color=gray>' ''Viene aggiunta un ulteriore elemento alla | <FONT Color=gray>' ''Viene aggiunta un ulteriore elemento alla seconda dimensione:''</font> | ||
<FONT Color=#B22222>bb.Push([])</font> | |||
<FONT Color=gray>' ''Vengono aggiunti degli elementi al nuovo 2° elemento della | <FONT Color=gray>' ''Vengono aggiunti degli elementi al nuovo 2° elemento (prima dimensione) della seconda dimensione:''</font> | ||
bb[1].Push(20) | |||
bb[1].Push(21) | |||
Print bb[1][0] | |||
Print bb[1][1] | |||
End | |||
altro esempio: | altro esempio: | ||
Public Sub Main() | |||
Dim bb As New Byte[][] | Dim bb As New Byte[][] | ||
Dim a, b As Byte | Dim a, b As Byte | ||
For a = 0 To 3 | For a = 0 To 3 | ||
<FONT Color=gray>' ''Crea un elemento ('''ovviamente di tipo array''') nella | <FONT Color=gray>' ''Crea un elemento ('''ovviamente di tipo array''') nella seconda dimensione, ossia crea la prima dimensione deputata a contenere i dati numerici.''</font> | ||
bb.Push([]) | bb.Push([]) | ||
For b = 0 To 5 | For b = 0 To 5 | ||
<FONT Color=gray>' ''Inserisce i valori nell'array della | <FONT Color=gray>' ''Inserisce i valori nell'array della prima dimensione appena sopra creata:''</font> | ||
bb[a].Push(b + a) | bb[a].Push(b + a) | ||
Next | Next | ||
Next | Next | ||
<FONT Color=gray>' ''Verifica:''</font> | <FONT Color=gray>' ''Verifica:''</font> | ||
For a = 0 To 3 | For a = 0 To 3 | ||
| Riga 161: | Riga 162: | ||
Next | Next | ||
End | |||
==Aggiungere dinamicamente variabili vettoriali ad un Array multidimensionale== | ==Aggiungere dinamicamente variabili vettoriali ad un Array multidimensionale== | ||
| Riga 168: | Riga 168: | ||
Esempio: | Esempio: | ||
Public Sub Main() | |||
Dim ss As New String[][] | Dim ss As New String[][] | ||
Dim s1, s2 As New String[] | Dim s1, s2 As New String[] | ||
<FONT color=gray>' ''Assegna dei valori alle due variabili array che saranno contenute nella variabile array principale:''</font> | |||
<FONT color=gray>' '' | s1 = ["a", "b"] | ||
s2 = ["c", "d", "e"] | |||
<FONT color=gray>' ''Assegnamo le due precedenti variabili array alla variabile array principale:''</font> | <FONT color=gray>' ''Assegnamo le due precedenti variabili array alla variabile array principale:''</font> | ||
<FONT color=#B22222>ss = [s1, s2]</font> | |||
<FONT color=gray>' ''Andiamo a vedere la quantità di elementi contenuti dalla variabile array principale, | <FONT color=gray>' ''Andiamo a vedere la quantità di elementi contenuti dalla variabile array principale, nonché da ciascuna variabile array individuandole all'interno della variabile array principale:''</font> | ||
Print ss.Count, ss[0].Count, ss[1].Count | |||
End | |||
ovviamente anche così: | |||
Public Sub Main() | |||
Dim | Dim bb As New Byte[][] | ||
bb.Push([0, 1]) <FONT color=gray>' ''Inserisce il primo array. Quindi ora bb = [0,1]''</font> | |||
Print bb[0][0] | |||
Print bb[0][1] | |||
bb[0].Push(2) <FONT color=gray>' ''Inserisce un valore nel primo array. Ora bb = [0,1,2]''</font> | |||
Print bb[0][2] | |||
Print | |||
bb.Push([10, 11]) <FONT color=gray>' ''Inserisce un secondo array. Ora bb = [[0,1,2], [10,11]]''</font> | |||
Print bb[1][0] | |||
Print bb[1][1] | |||
bb[1].Push(12) <FONT color=gray>' ''Inserisce un valore nel secondo array. Ora bb = [[0,1,2], [10,11.12]]''</font> | |||
Print bb[1][2] | |||
<FONT color=gray>' ''Andiamo a vedere la quantità di elementi contenuti dalla variabile array principale, | <FONT color=gray>' ''Andiamo a vedere la quantità di elementi contenuti dalla variabile array principale, nonché da ciascuna variabile array individuandole all'interno della variabile array principale:''</font> | ||
Print bb.Count, bb[0].Count, bb[1].Count | |||
End | |||
Vediamo anche quest'altro esempio: | Vediamo anche quest'altro esempio: | ||
Public Sub Main() | |||
Dim vettore As Byte[] | Dim vettore As Byte[] | ||
| Riga 218: | Riga 212: | ||
Dim b As Byte | Dim b As Byte | ||
For b = 2 To 9 | |||
<FONT Color=gray>' ''Crea un semplice vettore monodimensionale...''</font> | |||
vettore = New Byte[b] | |||
<FONT Color=gray>' ''...e lo aggiungiamo al array multidimensionale:''</font> | |||
multi.Push(vettore) | |||
Next | |||
<FONT Color=gray>' ''Assegna un valore ad un elemento di un vettore contenuto dall'array multidimensionale e verifichiamo in console:''</font> | |||
multi[7][5] = 24 | |||
Print multi[7][5] | |||
End | |||
=Array multidimensionale a tre dimensioni= | =Array multidimensionale a tre dimensioni= | ||
| Riga 243: | Riga 233: | ||
Tale variabile tridimensionale sarà così dichiarata (esempio con una variabile di tipo Stringa): | Tale variabile tridimensionale sarà così dichiarata (esempio con una variabile di tipo Stringa): | ||
Dim arrArr As String[][][] | Dim arrArr As New String[][][] | ||
Esempio: | Esempio: | ||
Public Sub Main() | |||
Dim ss As New String<FONT color=red>[]</font><FONT color=blue>[]</font>[] | |||
ss = <FONT color=red><B>[</b></font><FONT color=blue><B>[</b></font>["a", "b"], ["c", "d"], ["e", "f"]<FONT color=blue><B>]</b></font>, <FONT color=blue><B>[</b></font>["g", "h"], ["i", "l", "m", "n"], ["o", "p"]<FONT color=blue><B>]</b></font><FONT color=red><B>]</b></font> | ss = <FONT color=red><B>[</b></font><FONT color=blue><B>[</b></font>["a", "b"], ["c", "d"], ["e", "f"]<FONT color=blue><B>]</b></font>, <FONT color=blue><B>[</b></font>["g", "h"], ["i", "l", "m", "n"], ["o", "p"]<FONT color=blue><B>]</b></font><FONT color=red><B>]</b></font> | ||
<FONT color=gray>' ''Vogliamo sapere la quantità di elementi (che sono array) presenti nella variabile array | <FONT color=gray>' ''Vogliamo sapere la quantità di elementi (che sono array) presenti nella variabile array (il risultato sarà in questo caso "2"):</font> | ||
Print ss.Count | |||
<FONT color=gray>' ''Vogliamo sapere la quantità di elementi (che sono array) presenti nel secondo elemento della variabile array | <FONT color=gray>' ''Vogliamo sapere la quantità di elementi (che sono array) presenti nel secondo elemento della variabile array (il risultato in questo caso sarà "3"):''</font> | ||
Print ss[1].Count | |||
<FONT color=gray>' ''Volendo scendere ancora di livello, per conoscere la quantità di elementi presenti nel secondo elemento' | <FONT color=gray>' ''Volendo scendere ancora di livello, per conoscere la quantità di elementi presenti nel secondo elemento'' del secondo elemento superiore della variabile array (il risultato in questo caso sarà "4"):''</font> | ||
Print ss[1][1].Count | Print ss[1][1].Count | ||
End | |||
===Molteplici array di array=== | ===Molteplici array di array=== | ||
Ovviamente si potranno creare variabili array contenenti ulteriori e molteplici array di array al proprio interno. | Ovviamente si potranno creare variabili array contenenti ulteriori e molteplici array di array al proprio interno. | ||
=Array che contiene insieme sia singoli valori che altri array= | =Array che contiene insieme sia singoli valori che altri array= | ||
Per creare un vettore che contenga sia dei valori che altri vettori, è necessario usare il tipo di variabile ''Variant'': | Per creare un vettore che contenga sia dei valori che altri vettori, è necessario usare il tipo di variabile ''Variant'': | ||
Public Sub Main() | |||
Dim v As Variant[] = [1, 2, 3, 4] | Dim v As Variant[] = [1, 2, 3, 4] | ||
v.Add([5, 6, 7]) | |||
Print v[0] | |||
Print v[1] | |||
Print v[2] | |||
Print v[3] | |||
Print v[4][0] | |||
Print v[4][1] | |||
Print v[4][2] | |||
v.Add([8, 9, [10, 11, 12]]) | |||
Print v[5][0] | |||
Print v[5][1] | |||
Print v[5][2][0] | |||
Print v[5][2][1] | |||
Print v[5][2][2] | |||
End | |||
==Sostituire un valore in un elemento, contenente un singolo valore, con un array== | ==Sostituire un valore in un elemento, contenente un singolo valore, con un array== | ||
E' possibile sostituire, ovviamente in un elemento un singolo valore con un array, e viceversa: | E' possibile sostituire, ovviamente in un elemento un singolo valore con un array, e viceversa: | ||
Public Sub Main() | |||
Dim v1, v2 As Variant[] | Dim v1, v2 As Variant[] | ||
v1 = [1, 2, 3, 4] | |||
v2 = [5, 6, 7] | |||
v1[2] = v2 | |||
Print v1[0] | |||
Print v1[1] | |||
Print v1[2][0] | |||
Print v1[2][1] | |||
Print v1[2][2] | |||
Print v1[3] | |||
End | |||
=Note= | =Note= | ||
| Riga 329: | Riga 311: | ||
* nel vettore ''monodimensionale'' | * nel vettore ''monodimensionale'' | ||
Dim vettore As Integer[] | Dim vettore As Integer<FONT Color=green>[]</font> | ||
vengono contenuti valori non vettoriali: | vengono contenuti valori non vettoriali: | ||
vettore = <FONT color= | vettore = <FONT color=green><B>[</b></font>1, 2, 3, 4<FONT color=green><B>]</b></font> | ||
* nel vettore ''bidimensionale'' | * nel vettore ''bidimensionale'' | ||
Dim vettore As Integer<FONT color= | Dim vettore As Integer<FONT color=blue>[]</font><FONT color=green>[]</font> | ||
vengono contenuti uno o più vettori monodimensionali | vengono contenuti uno o più vettori monodimensionali | ||
vettore = <FONT color= | vettore = <FONT color=blue><B>[</b></font> <FONT color=green>[</font>1, 2, 3, 4<FONT color=green>]</font>, <FONT color=green>[</font>5, 6, 7, 8<FONT color=green>]</font> <FONT color=blue><B>]</b></font> | ||
* nel vettore ''tridimensionale'' | * nel vettore ''tridimensionale'' | ||
Dim vettore As Integer<FONT color=red>[]</font><FONT color=blue>[]</font>[] | Dim vettore As Integer<FONT color=red>[]</font><FONT color=blue>[]</font><FONT color=green>[]</font> | ||
vengono contenuti uno o più vettori bidimensionali | vengono contenuti uno o più vettori bidimensionali | ||
vettore = <FONT color=red><B>[</b></font> <FONT color=blue><B>[</b></font> <FONT color=darkgreen><B>[</b></font>1, 2, 3, 4<FONT color= | vettore = <FONT color=red><B>[</b></font> <FONT color=blue><B>[</b></font> <FONT color=darkgreen><B>[</b></font>1, 2, 3, 4<FONT color=green><B>]</b></font>, <FONT color=darkgreen><B>[</b></font>5, 6, 7, 8<FONT color=darkgreen><B>]</b></font> <FONT color=blue><B>]</b></font>, <FONT color=blue><B>[</b></font> <FONT color=darkgreen><B>[</b></font>8, 7, 6, 5<FONT color=darkgreen><B>]</b></font>, <FONT color=darkgreen><B>[</b></font>4, 3, 2, 1<FONT color=darkgreen><B>]</b></font> <FONT color=blue><B>]</b></font> <FONT color=red><B>]</b></font> | ||
e così via con gli altri multidimensionali. | e così via con gli altri multidimensionali. | ||
Versione attuale delle 06:10, 19 dic 2023
In Gambas vi sono anche Array (vettori) che non hanno un numero determinato degli elementi appartenenti alle loro dimensioni.
Dichiarazione di un array multidimensionale di numero non definito di elementi
L'array a numero non-determinato di elementi può definire due o più livelli di array.
Il primo livello è costituito da due o più array monodimensionali;
Il secondo livello contiene due o più array monodimensionali, ossia array di primo livello;
Il terzo livello contiene due o più array di secondo livello, ossia array di array;
e così via.
Così, ad esempio, in un array a due dimensioni la prima dimensione è costituita da due o più array monodimensionali contenenti i dati previsti dal tipo; la seconda dimensione contiene la predetta prima dimensione, ossia due o più elementi rappresentati dagli array monodimensionali.
Un array a due dimensioni di numero non definito di elementi, si dichiara a seconda dei casi o con istanziazione esplicita (esempio di Array di tipo Stringa contenente Array di tipo Stringa):
Dim arrArr As New String[][] [nota 1]
oppure con istanziazione implicita (senza l'uso della parola-chiave NEW):
Dim arrArr As String[][]
Istanziazione implicita con inizializzazione esplicita
La istanziazione implicita - con inizializzazione esplicita - di un array di numero non definito di elementi sarà effettuata così:
arrArr = [["a", "b"], ["c", "d"], ["e", "f"]]
Verificando, quindi, la quantità di elementi (che contengono array) presenti nel caso precedente all'interno della variabile array, si avrà il risultato di: 3
Public Sub Main() Dim arrArr As String[][] arrArr = [["a", "b"], ["c", "d"], ["e", "f"]] Print arrArr.Count End
Per sapere la quantità di elementi contenuti in un elemento array della variabile array, è necessaria l'istanziazione esplicita dell'array mediante la parola-chiave New:
Public Sub Main() Dim arrArr As New String[][] arrArr = [["a", "b"], ["c", "d"], ["e", "f"]] ' Vogliamo sapere la quantità di elementi presenti nel 2° elemento (che è un array) della variabile array bidimensionale: Print arrArr[1].Count End
Il risultato sarà: 2.
Vedere il contenuto di ciascun elemento
Per vedere il contenuto di ciascun elemento:
Public Sub Main() Dim arrArr As String[][] = [["a", "b"], ["c", "d"], ["e", "f"]] Dim b As Byte For b = 0 To arrArr[0].Max Print arrArr[0][b], arrArr[1][b], arrArr[2][b] Next End
Eliminare un elemento di una dimensione
Per eliminare un elemento di una dimensione dell'array:
Public Sub Main() Dim arr As Integer[][] arr = [[11, 111], [22, 222], [33, 333], [44, 444]] Print arr.Count ' Viene eliminato interamente il 1° elemento della seconda dimensione (cioè l'array [11, 111]): arr.Remove(0, 1) Print arr.Count, arr[0][0] Print arr[2].Count, arr[2][1] ' Viene eliminato il 2° elemento del corrente 3° elemento della seconda dimensione (cioè il valore 444): arr[2].Remove(1, 1) Print arr[2].Count ' Qui verrà sollevato un errore, perché è stato rimosso il 2° elemento di quello che era diventato il 3° elemento della seconda dimensione: Print arr[2][1] End
Rappresentazione delle dimensioni di un array multidimensionale di numero non definito di elementi
Va dunque precisato che durante l'uso di una variabile di tipo array, nella rappresentazione
variabile[n][n]
il numero presente nelle prime parentesi quadre di variabile[][] individua l'elemento della seconda dimensione della variabile[][]. Il numero, invece, presente nelle altre due parentesi quadre di variabile[][] individua l'elemento della prima dimensione, ossia l'elemento dell'elemento della seconda dimensione.
Pertanto, se abbiamo una variabile[][] (bidimensionale) così istanziata:
variabile[][] = [[11, 22, 33], [77, 88, 99]]
ponendo:
Print variabile[1][2]
con [1] è individuato il secondo elemento della seconda dimensione, mentre con [2] è individuato il terzo elemento della prima dimensione (il predetto secondo elemento della seconda dimensione), ossia il valore 99:
[[11, 22, 33], [77, 88, 99]]
Aggiungere elementi dinamicamente ad un array multidimensionale
Se l'array bidimensionale non ha un numero definito dei suoi elementi, esso è un vettore dinamico, ed è possibile aggiungere suoi elementi come segue:
Public Sub Main() Dim bb As New Byte[][] ' Viene aggiunto un elemento (indice 0) alla seconda dimensione, nonché il 1° elemento con relativo valore al predetto nuovo elemento della seconda dimensione: bb.Push([1]) Print bb[0][0] ' Viene aggiunto un altro elemento (indice 1) alla seconda dimensione, nonché il 1° elemento con relativo valore al predetto nuovo elemento della seconda dimensione: bb.Push([2]) Print bb[1][0] ' Viene aggiunto un altro elemento (indice 2) alla seconda dimensione, nonché il 1° e il 2° elemento con relativi valori al predetto nuovo elemento della seconda dimensione: bb.Push([3, 33]) Print bb[2][0], bb[2][1] End
Si sarà dunque costruito il seguente vettore bidimensionale:
[ [1], [2], [3, 33] ]
Come si nota, la seconda dimensione dell'array (quella compresa tra le parentesi quadre rosse) contiene tre elementi (ciascuno compreso da parentesi quadre blu), i quali - rappresentando la prima dimensione - contengono uno o due elementi.
Oppure:
Public Sub Main()
Dim bb As New Byte[][]
' Viene aggiunto il 1° elemento della seconda dimensione:
bb.Push([])
' Vengono aggiunti degli elementi al nuovo 1° elemento (prima dimensione) della seconda dimensione:
bb[0].Push(10)
bb[0].Push(11)
Print bb[0][0]
Print bb[0][1]
' Viene aggiunta un ulteriore elemento alla seconda dimensione:
bb.Push([])
' Vengono aggiunti degli elementi al nuovo 2° elemento (prima dimensione) della seconda dimensione:
bb[1].Push(20)
bb[1].Push(21)
Print bb[1][0]
Print bb[1][1]
End
altro esempio:
Public Sub Main()
Dim bb As New Byte[][]
Dim a, b As Byte
For a = 0 To 3
' Crea un elemento (ovviamente di tipo array) nella seconda dimensione, ossia crea la prima dimensione deputata a contenere i dati numerici.
bb.Push([])
For b = 0 To 5
' Inserisce i valori nell'array della prima dimensione appena sopra creata:
bb[a].Push(b + a)
Next
Next
' Verifica:
For a = 0 To 3
For b = 0 To 5
Print bb[a][b]
Next
Print
Next
End
Aggiungere dinamicamente variabili vettoriali ad un Array multidimensionale
Conseguentemente ed ovviamente tali array multidimensionali possono contenere nei loro elementi variabili array monodimensionali.
Esempio:
Public Sub Main() Dim ss As New String[][] Dim s1, s2 As New String[] ' Assegna dei valori alle due variabili array che saranno contenute nella variabile array principale: s1 = ["a", "b"] s2 = ["c", "d", "e"] ' Assegnamo le due precedenti variabili array alla variabile array principale: ss = [s1, s2] ' Andiamo a vedere la quantità di elementi contenuti dalla variabile array principale, nonché da ciascuna variabile array individuandole all'interno della variabile array principale: Print ss.Count, ss[0].Count, ss[1].Count End
ovviamente anche così:
Public Sub Main() Dim bb As New Byte[][] bb.Push([0, 1]) ' Inserisce il primo array. Quindi ora bb = [0,1] Print bb[0][0] Print bb[0][1] bb[0].Push(2) ' Inserisce un valore nel primo array. Ora bb = [0,1,2] Print bb[0][2] Print bb.Push([10, 11]) ' Inserisce un secondo array. Ora bb = [[0,1,2], [10,11]] Print bb[1][0] Print bb[1][1] bb[1].Push(12) ' Inserisce un valore nel secondo array. Ora bb = [[0,1,2], [10,11.12]] Print bb[1][2] ' Andiamo a vedere la quantità di elementi contenuti dalla variabile array principale, nonché da ciascuna variabile array individuandole all'interno della variabile array principale: Print bb.Count, bb[0].Count, bb[1].Count End
Vediamo anche quest'altro esempio:
Public Sub Main() Dim vettore As Byte[] Dim multi As New Byte[][] Dim b As Byte For b = 2 To 9 ' Crea un semplice vettore monodimensionale... vettore = New Byte[b] ' ...e lo aggiungiamo al array multidimensionale: multi.Push(vettore) Next ' Assegna un valore ad un elemento di un vettore contenuto dall'array multidimensionale e verifichiamo in console: multi[7][5] = 24 Print multi[7][5] End
Array multidimensionale a tre dimensioni
Analogamente ai bidimensionali in un array a tre dimensioni la prima dimensione è l'array multidimensionale in quanto tale, destinata a contenere uno o più elementi di tipo array. Tali elementi rappresentano la seconda dimensione e sono destinati a contenere uno o più elementi di tipo array. Questi elementi rappresentano la terza e ultima dimensione e sono destinati, pertanto, a contenere i dati veri e propri previsti dal tipo.
Dunque una variabile array tridimensionale è un array contenente array che contengono a loro volta altri array (questi ultimi array invece contengono finalmente i valori da immagazzinare).
Tale variabile tridimensionale sarà così dichiarata (esempio con una variabile di tipo Stringa):
Dim arrArr As New String[][][]
Esempio:
Public Sub Main() Dim ss As New String[][][] ss = [[["a", "b"], ["c", "d"], ["e", "f"]], [["g", "h"], ["i", "l", "m", "n"], ["o", "p"]]] ' Vogliamo sapere la quantità di elementi (che sono array) presenti nella variabile array (il risultato sarà in questo caso "2"): Print ss.Count ' Vogliamo sapere la quantità di elementi (che sono array) presenti nel secondo elemento della variabile array (il risultato in questo caso sarà "3"): Print ss[1].Count ' Volendo scendere ancora di livello, per conoscere la quantità di elementi presenti nel secondo elemento del secondo elemento superiore della variabile array (il risultato in questo caso sarà "4"): Print ss[1][1].Count End
Molteplici array di array
Ovviamente si potranno creare variabili array contenenti ulteriori e molteplici array di array al proprio interno.
Array che contiene insieme sia singoli valori che altri array
Per creare un vettore che contenga sia dei valori che altri vettori, è necessario usare il tipo di variabile Variant:
Public Sub Main() Dim v As Variant[] = [1, 2, 3, 4] v.Add([5, 6, 7]) Print v[0] Print v[1] Print v[2] Print v[3] Print v[4][0] Print v[4][1] Print v[4][2] v.Add([8, 9, [10, 11, 12]]) Print v[5][0] Print v[5][1] Print v[5][2][0] Print v[5][2][1] Print v[5][2][2] End
Sostituire un valore in un elemento, contenente un singolo valore, con un array
E' possibile sostituire, ovviamente in un elemento un singolo valore con un array, e viceversa:
Public Sub Main() Dim v1, v2 As Variant[] v1 = [1, 2, 3, 4] v2 = [5, 6, 7] v1[2] = v2 Print v1[0] Print v1[1] Print v1[2][0] Print v1[2][1] Print v1[2][2] Print v1[3] End
Note
[1] Possiamo dire che:
- nel vettore monodimensionale
Dim vettore As Integer[]
vengono contenuti valori non vettoriali:
vettore = [1, 2, 3, 4]
- nel vettore bidimensionale
Dim vettore As Integer[][]
vengono contenuti uno o più vettori monodimensionali
vettore = [ [1, 2, 3, 4], [5, 6, 7, 8] ]
- nel vettore tridimensionale
Dim vettore As Integer[][][]
vengono contenuti uno o più vettori bidimensionali
vettore = [ [ [1, 2, 3, 4], [5, 6, 7, 8] ], [ [8, 7, 6, 5], [4, 3, 2, 1] ] ]
e così via con gli altri multidimensionali.