Array dinamici – creazione e riempimento
Descriveremo la creazione e l'assegnazione di valori ad un array monodimensionale, o vettore, dinamico (con quantità di elementi non definita a priori) e ad uno multidimensionale, nonché i casi in cui la definizione della quantità degli elementi viene definita successivamente in modo esplicito o in modo dinamico.
Un vettore è dinamico se, non avendo definita a priori la quantità dei suoi elementi interni, è suscettibile di incrementare detta quantità di volta in volta, ogni qualvolta lo si renda necessario.
Un vettore dinamico è un vero e proprio oggetto Gambas.
Indice
Creazione di un array monodimensionale, definizione dinamica dei suoi elementi e loro riempimento
Oltre alla dichiarazione dell'array (vettore), per ottenere l'incremento del numero di elementi interni, e dunque l'assegnazione di un determinato valore a ciascun nuovo elemento, bisognerà creare l'array utilizzando la parola New. Un nuovo elemento verrà generato (incrementando così il numero di elementi dell'array in quel momento) aggiungendo un nuovo valore all'array mediante il metodo .Add().
Public Sub Button1_Click() Dim bb As New Byte[] ' All'interno delle parentesi quadre non è indicato alcun valore Dim j As Byte For j = 0 To 9 ' Ad ogni ciclo viene assegnato un valore all'array, ' e quindi viene creato un nuovo elemento di indice successivo all'ultimo che era stato generato: bb.Add(j) Next End
Questa soluzione determina ogni volta la creazione di un oggetto vettore, e pertanto gli eventuali precedenti assegnamenti verranno persi.
Ridefinizione degli elementi di un identificatore di Matrice
In modo analogo al caso del Vettore, visto sopra, si può ottenere la rideterminazione del numero degli elementi di un identificatore di una Vettore multidimensionale, o Matrice. Per ottenere ciò, bisognerà incrementare l'indicazione della quantità degli elementi all'atto della creazione della matrice.
Ogni dimensione andrà espressa da una variabile, il cui valore sarà di volta in volta incrementato. Il valore di partenza di detta variabile dovrà essere almeno pari a 1 (uno) .
Facciamo l'esempio di una Matrice bidimensionale, di cui intendiamo definire dinamicamente (ossia incrementare) il numero degli elementi solamente della prima dimensione (riga), per consentire conseguentemente di volta in volta così il loro utilizzo:
Private b As Byte Private bb As Byte[] Public Sub Button1_Click() Inc b ' Definiamo la "nuova" quantità di righe della Matrice bidimensionale ' con un nuovo valore superiore di un'unità rispetto al precedente: bb = New Byte[b, 3] bb[b - 1, 1] = b Print bb.Count, bb[b - 1, 1] End
Anche in questo caso le eventuali assegnazioni di valori agli elementi della Matrice, verranno perse, in quanto ogni volta viene generato un nuovo oggetto variabile di tipo Matrice. Dunque gli Array multidimensionali sono statici.
Modifica successiva del numero di elementi di un Vettore
La definizione della quantità di elementi di un Vettore può essere modificata successivamente in codice con varie modalità:
Public Sub Main() ' Facciamo l'esempio con un vettore con numero di elementi non definito ' e con un vettore avente un numero di elementi già dichiarato: Dim a As New Byte[2] Dim b As New Byte[] ' Verifica dello stato iniziale del numero degli elementi del vettore: Print a.Count ' Di seguito le tre modalità per la modifica del numero ' già definito degli elementi di un vettore: a = [0, 1, 2] Print a.Count a.Add(99) Print a.Count ' Variazione del numero degli elementi mediante il metodo ".Resize()": a.Resize(5) Print a.Count '''''''''''''''''''''''''' ' Verifica dello stato iniziale del numero degli elementi del vettore: Print b.Count ' Di seguito le tre modalità per la modifica del numero ' non predefinito degli elementi di un vettore: b.Add(99) Print b.Count b = [0, 1] Print b.Count b.Resize(3) Print b.Count End
Definizione esplicita successiva della quantità degli elementi
In questo caso la quantità di elementi di un array non è definita con la dichiarazione, ma lo diviene successivamente. Si provvede, insomma, a stabilire il numero definito degli elementi dell'array semplicemente in una fase successiva e non preliminarmente.
Nella dichiarazione della variabile di tipo vettoriale ovviamente non sarà fatta alcuna determinazione del numero di elementi del vettore medesimo. Tale definizione avverra successivamente in routine: si provvederà alla creazione della variabile vettoriale e, quindi, alla definizione del numero dei suoi elementi.
Public Sub Button1_Click() Dim qnt$ As String Dim qntI, nu As Integer Dim ii As Integer[] ' dichiara l'array, ma senza definirne la quantità degli elementi ' Dimensiona "ora" il vettore, in questo esempio con un "InputBox": qnt$ = InputBox("Inserisci tu la dimensione delle righe dell'array:") qntI = Val(qnt$) ' Il vettore assume la quantità di elementi definiti manualmente con l'"InputBox": ii = New Integer[qntI] For nu = 0 To ii.Max ' Riempie ogni elemento dell'array, però, fino al suo numero massimo definito: ii[nu] = nu Print ii[nu] Next End
e similmente in un array multidimensionale.
Definizione del numero degli elementi sulla base della dimensione di un file
Se il numero di elementi del vettore dovrà assumere il valore uguale al numero di byte che compongono un file, si potrà utilizzare la proprietà .Size della Classe Stat():
Public Sub Main() Dim bb As Byte[] Dim fl As File fl = Open "/percorso/del/file" For Read bb = New Byte[Lof(fl)] bb.Read(fl) fl.Close End