|
|
(7 versioni intermedie di uno stesso utente non sono mostrate) |
Riga 1: |
Riga 1: |
− | In Gambas vi sono [[Array_multidimensionali_statici|''Array'' (vettori) <SPAN Style="text-decoration:underline">statici</span>]] ed ''Array'' (vettori) <SPAN Style="text-decoration:underline">dinamici</span>.
| + | #redirect [[Array_multidimensionali_con_numero_indeterminato_di_elementi]] |
− | | |
− | | |
− | 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 ''dinimici''contengono 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 = <FONT color=blue><B>[</b></font>["a", "b"], ["c", "d"], ["e", "f"]<FONT color=blue><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
| |
− | '''Public''' Sub Main()
| |
− |
| |
− | Dim arrArr As New String[][]
| |
− |
| |
− | arrArr = <FONT color=blue><B>[</b></font>["a", "b"], ["c", "d"], ["e", "f"]<FONT color=blue><B>]</b></font>
| |
− |
| |
− | 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 = <FONT color=blue><B>[</b></font>["a", "b"], ["c", "d"], ["e", "f"]<FONT color=blue><B>]</b></font>
| |
− |
| |
− | <FONT color=gray>' ''Vogliamo sapere la quantità di elementi''
| |
− | ' ''presenti nel secondo elemento (che è un array) della variabile array:''</font>
| |
− | 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<FONT color=#B22222><B>[]</b></font><FONT color=gray>[]</font> rappresenta la dimensione di ''variabile[][]'', ossia individua un vettore contenuto nella stessa ''variabile[][]''. Il numero, invece, presente nelle altre due parentesi quadre di variabile<FONT color=gray>[]</font><FONT color=#B22222><B>[]</b></font> 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, <FONT color=#B22222><B>99</b></font>]]
| |
− | | |
− | | |
− | | |
− | ==Variabili array che contengono altre variabili array==
| |
− | Conseguentemente ed ovviamente tali variabili array possono contenere nei loro elementi altre variabili array.
| |
− | | |
− | Esempio:
| |
− | '''Public''' Sub Main()
| |
− |
| |
− | Dim ss As New String[][]
| |
− | Dim s1, s2 As New String[]
| |
− |
| |
− |
| |
− | <FONT color=gray>' ''Assegnamo dei valori ale due variabili array''
| |
− | ' ''che saranno contenute nella variabile array principale:''</font>
| |
− | s1 = ["a", "b"]
| |
− | s2 = ["c", "d", "e"]
| |
− |
| |
− | <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,''
| |
− | ' ''nonché da ciascuna variabile array individuandole all'interno della variabile array principale:''</font>
| |
− | 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[]
| |
− |
| |
− |
| |
− | <FONT color=gray>' ''Assegnamo dei valori ale due variabili array''
| |
− | ' ''che saranno contenute nella variabile array principale:''</font>
| |
− | s1 = ["a", "b"]
| |
− | s2 = ["c", "d", "e"]
| |
− |
| |
− | <FONT color=gray>' ''Assegnamo le due precedenti variabili array alla variabile array principale:''</font>
| |
− | <FONT color=#B22222>ss.Push(s1)
| |
− | ss.Push(s2)</font>
| |
− |
| |
− | <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'''
| |
− | | |
− | | |
− | | |
− | ==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 gli elementi in due modalità:
| |
− | '''Public''' Sub Main()
| |
− |
| |
− | Dim bb As New Byte[][]
| |
− |
| |
− | <FONT Color=gray>' ''Viene aggiunta una dimensione ed il suo primo elemento:''</font>
| |
− | bb.Push([1])
| |
− | Print bb[0][0]
| |
− |
| |
− | <FONT Color=gray>' ''Viene aggiunta la seconda dimensione ed il suo primo elemento:''</font>
| |
− | bb.Push([2])
| |
− | Print bb[1][0]
| |
− |
| |
− | '''End'''
| |
− | | |
− | | |
− | oppure:
| |
− | '''Public''' Sub Main()
| |
− |
| |
− | Dim bb As New Byte[][]
| |
− |
| |
− | <FONT Color=gray>' ''Viene creata la prima dimensione:''</font>
| |
− | <FONT Color=#B22222>bb.Push([])</font>
| |
− |
| |
− | <FONT Color=gray>' ''Vengono aggiunti degli elementi alla prima 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 dimensione:''</font>
| |
− | <FONT Color=#B22222>bb.Push([])</font>
| |
− |
| |
− | <FONT Color=gray>' ''Vengono aggiunti degli elementi alla nuova seconda dimensione:''</font>
| |
− | 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[][]
| |
− |
| |
− | <FONT Color=gray>' ''Viene creata la prima dimensione, ed aggiunti due elementi ed i rispettivi valori:''</font>
| |
− | <FONT Color=#B22222>bb.Push([1, 10])
| |
− |
| |
− | <FONT Color=gray>' ''Viene aggiunta una seconda dimensione, ed aggiunti due elementi ed i rispettivi valori:''</font>
| |
− | bb.Push([2, 20])</font>
| |
− |
| |
− | Print bb[0][0]
| |
− | Print bb[0][1]
| |
− | Print bb[1][0]
| |
− | Print bb[1][1]
| |
− |
| |
− | '''End'''
| |
− | | |
− | | |
− | ===Aggiungere dinamicamente vettori ad un Array multidimensionale===
| |
− | In quest'altro caso aggiungeremo dinamicamente dei vettori ad un Array multidimensionale:
| |
− | '''Public''' Sub Main()
| |
− |
| |
− | Dim vettore As Byte[]
| |
− | Dim multi As New Byte[][]
| |
− | Dim b As Byte
| |
− |
| |
− | For b = 2 To 9
| |
− |
| |
− | <FONT Color=gray>' ''Creiamo 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>' ''Assegnamo 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=
| |
− | Potremo anche creare ed utilizzare una variabile array tridimensionali (un array contenente array che contengono a loro volta altri array). |[[#Note|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 = <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''
| |
− | ' (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
| |
− | ' (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''
| |
− | ' del secondo elemento superiore della variabile array (il risultato in questo caso sarà "4"):''</font>
| |
− | 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 = <FONT color=darkgreen><B>[</b></font>1, 2, 3, 4<FONT color=darkgreen><B>]</b></font>
| |
− | | |
− | | |
− | Nel vettore di ''secondo'' livello
| |
− | Dim vettore As Integer[][]
| |
− | vengono contenuti due o più vettori di primo livello
| |
− | vettore = <FONT color=blue><B>[</b></font> <FONT color=darkgreen><B>[</b></font>1, 2, 3, 4<FONT color=darkgreen><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>
| |
− | | |
− | | |
− | Nel vettore di ''terzo'' livello
| |
− | Dim vettore As Integer[][][]
| |
− | vengono contenuti due o più vettori di secondo livello
| |
− | 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=darkgreen><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>9, 8, 7, 6<FONT color=darkgreen><B>]</b></font>, <FONT color=darkgreen><B>[</b></font>5, 4, 3, 2<FONT color=darkgreen><B>]</b></font> <FONT color=blue><B>]</b></font> <FONT color=red><B>]</b></font>
| |
− | | |
− | e così via con gli altri livelli.
| |