Array multidimensionali dinamici
In Gambas vi sono Array (vettori) statici ed Array (vettori) dinamici.
Il tipo di vettori multidimensionali dinamico non ha un numero determinato delle proprie dimensioni né degli elementi costituenti tali dimensioni, ma essi possono essere incrementati di volta in volta.
Come per i vettori multidimensionali statici anche quelli dinimicicontengono nelle loro dimensioni altri array.
Un array a due dimensioni dinamico (e dunque di dimensioni ed elementi non definiti), si dichiara nel modo seguente (esempio di Array di tipo Stringa contenente Array di tipo Stringa):
Dim arrArr As String[][]
e la sua istanziazione implicita sarà effettuata nel seguente modo:
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 New 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:
Public Sub Main() Dim arrArr As New String[][] arrArr = [["a", "b"], ["c", "d"], ["e", "f"]] ' Vogliamo sapere la quantità di elementi ' presenti nel secondo elemento (che è un array) della variabile array: Print arrArr[1].Count End
Il risultato sarà: 2.
Per vedere il contenuto di ciascun elemento:
Public Sub Main() Dim arrArr As String[][] = [["a", "b"], ["c", "d"], ["e", "f"]] Dim j As Byte For j = 0 To arrArr[0].Max Print arrArr[0][j], arrArr[1][j], arrArr[2][j] Next End
Per eliminare ad esempio un elemento da una dimensione:
Public Sub Main() Dim arrArr As String[][] arrArr = [["a", "b"], ["c", "d"], ["e", "f"], ["e", "f"]] Print arrArr.Count Print arrArr[2].Count arrArr[2].Remove(0) Print arrArr[2].Count End
Va dunque precisato che della rappresentazione
variabile[][]
il numero presente nelle prime parentesi quadre di variabile[][] rappresenta la dimensione di variabile[][], ossia individua un vettore contenuto nella stessa variabile[][]. Il numero, invece, presente nelle altre due parentesi quadre di variabile[][] individua l'elemento del vettore contenuto da variabile[][].
Pertanto, se abbiamo una variabile[][] così istanziata:
variabile[][] = [[11, 22, 33], [77, 88, 99]]
ponendo:
Print variabile[1][2]
individueremo il terzo elemento del secondo vettore contenuto dalla variabile[][], ossia:
[[11, 22, 33], [77, 88, 99]]
Indice
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 aggiunta una dimensione ed il suo primo elemento: bb.Push([1]) Print bb[0][0] ' Viene aggiunta la seconda dimensione ed il suo primo elemento: bb.Push([2]) Print bb[1][0] End
oppure:
Public Sub Main() Dim bb As New Byte[][] ' Viene creata la prima dimensione: bb.Push([]) ' Vengono aggiunti degli elementi alla prima dimensione: bb[0].Push(10) bb[0].Push(11) Print bb[0][0] Print bb[0][1] ' Viene aggiunta un'ulteriore dimensione: bb.Push([]) ' Vengono aggiunti degli elementi alla nuova seconda dimensione: bb[1].Push(20) bb[1].Push(21) Print bb[1][0] Print bb[1][1] End
oppure:
Public Sub Main() Dim bb As New Byte[][] ' Viene creata la prima dimensione, ed aggiunti due elementi ed i rispettivi valori: bb.Push([1, 10]) ' Viene aggiunta una seconda dimensione, ed aggiunti due elementi ed i rispettivi valori: bb.Push([2, 20]) Print bb[0][0] Print bb[0][1] Print bb[1][0] Print bb[1][1] 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[] ' Assegnamo dei valori ale 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
oppure più dinamicamente:
Public Sub Main() Dim ss As New String[][] Dim s1, s2 As New String[] ' Assegnamo dei valori ale 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.Push(s1) ss.Push(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
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 ' Creiamo un semplice vettore monodimensionale... vettore = New Byte[b] ' ...e lo aggiungiamo al array multidimensionale: multi.Push(vettore) Next ' Assegnamo 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
Potremo anche creare ed utilizzare una variabile array tridimensionali (un array contenente array che contengono a loro volta altri array). |1|
Tale variabile tridimensionale sarà così dichiarata (esempio con una variabile di tipo Stringa):
Dim arrArr As 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] Potremmo immaginare ogni gruppo di parantesi quadre [] come un livello vettoriale.
Nel vettore di primo livello
Dim vettore As Integer[]
vengono contenuti i valori veri e propri del vettore:
vettore = [1, 2, 3, 4]
Nel vettore di secondo livello
Dim vettore As Integer[][]
vengono contenuti due o più vettori di primo livello
vettore = [ [1, 2, 3, 4], [5, 6, 7, 8] ]
Nel vettore di terzo livello
Dim vettore As Integer[][][]
vengono contenuti due o più vettori di secondo livello
vettore = [ [ [1, 2, 3, 4], [5, 6, 7, 8] ], [ [9, 8, 7, 6], [5, 4, 3, 2] ] ]
e così via con gli altri livelli.