Differenze tra le versioni di "Array multidimensionali dinamici"

Da Gambas-it.org - Wikipedia.
 
(3 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 ''dinamici'' 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<FONT color=red>[]</font><FONT color=blue>[]</font>  <SUP>&#91;[[#Note|nota 1]]&#93;</sup>
 
e la sua istanziazione ''implicita'' sarà effettuata nel seguente modo:
 
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
 
'''Public''' Sub Main()
 
 
  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>
 
 
  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=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 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[][] = <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 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 = <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=blue>[</font>"g", "h"<FONT color=blue>]</font><FONT color=red><B>]</b></font>
 
   
 
  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=blue><B>[]</b></font> individua l'elemento del vettore contenuto da ''variabile[][]''.
 
 
 
Pertanto, se abbiamo una variabile[][] così istanziata:
 
variabile[][] = <FONT color=red><B>[</b></font><FONT color=blue>[</font>11, 22, 33<FONT color=blue>]</font>, <FONT color=blue>[</font>77, 88, 99<FONT color=blue>]</font><FONT color=red><B>]</b></font>
 
 
 
ponendo:
 
Print variabile[1][2]
 
individueremo il terzo elemento del secondo vettore contenuto dalla ''variabile[][]'', ossia:
 
<FONT color=red><B>[</b></font><FONT color=blue>[</font>11, 22, 33<FONT color=blue>]</font>, <FONT color=blue>[</font>77, 88, <B>99</b><FONT color=blue>]</font><FONT color=red><B>]</b></font>
 
 
 
 
 
 
 
==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[][]
 
 
<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 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[]
 
 
 
 
<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'''
 
 
 
 
 
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
 
 
 
<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).
 
 
 
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<FONT color=red>[]</font><FONT color=blue>[]</font>
 
vengono contenuti due o più vettori di primo livello
 
vettore = <FONT color=red><B>[</b></font> <FONT color=blue>[</font>1, 2, 3, 4<FONT color=blue>]</font>, <FONT color=blue>[</font>5, 6, 7, 8<FONT color=blue>]</font> <FONT color=red><B>]</b></font>
 
 
 
 
 
Nel vettore di ''terzo'' livello
 
Dim vettore As Integer<FONT color=red>[]</font><FONT color=blue>[]</font>[]
 
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.
 

Versione attuale delle 10:16, 19 apr 2018