Array multidimensionali dinamici: differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
In Gambas vi sono [[Array_multidimensionali_statici|''Array'' (vettori) che non hanno un numero determinato degli ''elementi'' costituenti le loro dimensioni, e ''Array'' (vettori), ai quali viene in sede di definizione specificato il numero dei propri ''elementi'' costitutivi delle loro dimensioni.
#redirect [[Array_multidimensionali_con_numero_indeterminato_di_elementi]]
 
Entrambi i tipi di array (vettori) multidimensionali contengono nelle loro ''dimensioni'' altri array.
 
Un array a due dimensioni di 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'' - con inizializzazione ''esplicita'' - 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
'''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=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'':
  '''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 2° elemento (che è un array) della variabile array bidimensionale:''</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 dall'interno di una dimensione dell'array:
'''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 durante l'uso di una variabile di tipo array, la rappresentazione
variabile[n][n]
il numero presente nelle prime parentesi quadre di variabile<FONT color=#B22222><B>[]</b></font><FONT color=gray>[]</font> rappresenta la <SPAN Style="text-decoration:underline">dimensione</span> 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'<SPAN Style="text-decoration:underline">elemento</span> del vettore contenuto da ''variabile[][]''.
 
Pertanto, se abbiamo una variabile[][] (bidimensionale) 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