Differenze tra le versioni di "Array multidimensionali con numero indeterminato di elementi"
Riga 286: | Riga 286: | ||
=Note= | =Note= | ||
− | [1] | + | [1] Possiamo dire che: |
− | + | nel vettore ''monodimensionale'' | |
Dim vettore As Integer[] | Dim vettore As Integer[] | ||
− | vengono contenuti i valori | + | vengono contenuti i valori non vettoriali: |
vettore = <FONT color=darkgreen><B>[</b></font>1, 2, 3, 4<FONT color=darkgreen><B>]</b></font> | vettore = <FONT color=darkgreen><B>[</b></font>1, 2, 3, 4<FONT color=darkgreen><B>]</b></font> | ||
− | + | nel vettore ''bidimensionale'' | |
Dim vettore As Integer<FONT color=red>[]</font><FONT color=blue>[]</font> | Dim vettore As Integer<FONT color=red>[]</font><FONT color=blue>[]</font> | ||
− | vengono contenuti due o più vettori | + | vengono contenuti due o più vettori monodimensionali |
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> | 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 ''tridimensionale'' | |
Dim vettore As Integer<FONT color=red>[]</font><FONT color=blue>[]</font>[] | Dim vettore As Integer<FONT color=red>[]</font><FONT color=blue>[]</font>[] | ||
− | vengono contenuti due o più vettori | + | vengono contenuti due 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=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> | 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 | + | e così via con gli altri. |
Versione delle 17:59, 18 dic 2019
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.
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[][] [nota 1]
e la sua istanziazione implicita - con inizializzazione esplicita - 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.
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 dall'interno di una dimensione dell'array:
Public Sub Main() Dim arrArr As String[][] arrArr = [["a", "b"], ["c", "d"], ["e", "f"]["g", "h"]] 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[][] individua l'elemento della prima dimensione della variabile[][], ossia individua un vettore contenuto nella stessa variabile[][]. Il numero, invece, presente nelle altre due parentesi quadre di variabile[][] individua l'elemento dell'elemento, cioè della seconda dimensione, contenuto da variabile[][].
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 prima dimensione, mentre con [2] è individuato il terzo elemento del predetto secondo elemento della prima dimensione, 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 aggiunto un elemento alla seconda dimensione, nonché il primo elemento al predetto nuovo elemento della seconda dimensione: bb.Push([1]) Print bb[0][0] ' Viene aggiunto un altro elemento alla seconda dimensione, nonché il 1° elemento al predetto nuovo elemento della seconda dimensione: bb.Push([2]) Print bb[1][0] ' Viene aggiunto un altro elemento alla seconda dimensione, nonché il 1° e il 2° elemento al predetto nuovo elemento della seconda dimensione: bb.Push([3, 33]) Print bb[2][0], bb[2][1] End
oppure:
Public Sub Main() Dim bb As New Byte[][] ' Viene aggiunto il 1° elemento della prima dimensione: bb.Push([]) ' Vengono aggiunti degli elementi al nuovo 1° elemento della prima dimensione: bb[0].Push(10) bb[0].Push(11) Print bb[0][0] Print bb[0][1] ' Viene aggiunta un ulteriore elemento alla prima dimensione: bb.Push([]) ' Vengono aggiunti degli elementi al nuovo 2° elemento della prima dimensione: bb[1].Push(20) bb[1].Push(21) 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).
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] Possiamo dire che:
nel vettore monodimensionale
Dim vettore As Integer[]
vengono contenuti i valori non vettoriali:
vettore = [1, 2, 3, 4]
nel vettore bidimensionale
Dim vettore As Integer[][]
vengono contenuti due o più vettori monodimensionali
vettore = [ [1, 2, 3, 4], [5, 6, 7, 8] ]
nel vettore tridimensionale
Dim vettore As Integer[][][]
vengono contenuti due o più vettori bidimensionali
vettore = [ [ [1, 2, 3, 4], [5, 6, 7, 8] ], [ [9, 8, 7, 6], [5, 4, 3, 2] ] ]
e così via con gli altri.