Differenze tra le versioni di "Array multidimensionali con numero indeterminato di elementi"
(48 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | In Gambas vi sono | + | 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. | ||
+ | <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. | ||
− | + | 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<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''=== | ||
+ | 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> | ||
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=== | |
− | Per eliminare | + | 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 | ||
+ | |||
+ | <FONT Color=gray>' ''Viene eliminato interamente il 1° elemento della seconda dimensione (cioè l'array [11, 111]):</font> | ||
+ | arr.Remove(0, 1) | ||
+ | Print arr.Count, arr[0][0] | ||
− | + | 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) | ||
+ | Print arr[2].Count | ||
+ | <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] | ||
− | + | 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, | + | 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 73: | Riga 87: | ||
ponendo: | ponendo: | ||
Print variabile[1][2] | 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: | |
− | <FONT color=red><B>[</b></font><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 | + | <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]) | |
− | + | Print bb[0][0] | |
− | <FONT Color=gray>' ''Viene | + | <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]) | |
− | + | Print bb[1][0] | |
+ | |||
+ | <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]) | ||
+ | Print bb[2][0], bb[2][1] | ||
− | + | End | |
− | + | 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> | ||
+ | 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 | + | <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 | + | <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 | + | <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 | + | <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: | |
− | + | Public Sub Main() | |
− | |||
− | |||
− | |||
− | |||
− | |||
Dim bb As New Byte[][] | Dim bb As New Byte[][] | ||
− | + | Dim a, b As Byte | |
− | <FONT Color=gray>' '' | + | |
− | + | For a = 0 To 3 | |
+ | <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([]) | ||
+ | For b = 0 To 5 | ||
+ | <FONT Color=gray>' ''Inserisce i valori nell'array della prima dimensione appena sopra creata:''</font> | ||
+ | bb[a].Push(b + a) | ||
+ | Next | ||
+ | Next | ||
+ | |||
+ | <FONT Color=gray>' ''Verifica:''</font> | ||
+ | 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== | ==Aggiungere dinamicamente variabili vettoriali ad un Array multidimensionale== | ||
Riga 147: | 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 197: | 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= | ||
+ | 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): | 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= | ||
− | [1] | + | [1] Possiamo dire che: |
− | |||
− | |||
− | |||
− | |||
+ | * nel vettore ''monodimensionale'' | ||
+ | Dim vettore As Integer<FONT Color=green>[]</font> | ||
+ | vengono contenuti valori non vettoriali: | ||
+ | vettore = <FONT color=green><B>[</b></font>1, 2, 3, 4<FONT color=green><B>]</b></font> | ||
− | |||
− | |||
− | |||
− | |||
+ | * nel vettore ''bidimensionale'' | ||
+ | Dim vettore As Integer<FONT color=blue>[]</font><FONT color=green>[]</font> | ||
+ | vengono contenuti uno o più vettori monodimensionali | ||
+ | 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> | ||
− | |||
− | |||
− | |||
− | |||
− | e così via con gli altri | + | * nel vettore ''tridimensionale'' |
+ | Dim vettore As Integer<FONT color=red>[]</font><FONT color=blue>[]</font><FONT color=green>[]</font> | ||
+ | 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=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. |
Versione attuale delle 05:10, 19 dic 2023
In Gambas vi sono anche Array (vettori) che non hanno un numero determinato degli elementi appartenenti alle loro dimensioni.
Indice
- 1 Dichiarazione di un array multidimensionale di numero non definito di elementi
- 2 Rappresentazione delle dimensioni di un array multidimensionale di numero non definito di elementi
- 3 Aggiungere elementi dinamicamente ad un array multidimensionale
- 4 Aggiungere dinamicamente variabili vettoriali ad un Array multidimensionale
- 5 Array multidimensionale a tre dimensioni
- 6 Array che contiene insieme sia singoli valori che altri array
- 7 Note
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.