Differenze tra le versioni di "Array dinamici – creazione e riempimento"

Da Gambas-it.org - Wikipedia.
 
(10 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Descriveremo la creazione e l'assegnazione di valori ad un array monodimensionale, o [http://it.wikipedia.org/wiki/Array 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.
+
#REDIRECT [[Array:_creazione,_modifica_e_riempimento]]
 
 
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.
 
 
 
 
 
==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 <FONT color=#B22222>New</font> Byte<FONT color=#B22222>[]</font>  <FONT color=gray>' ''All'interno delle parentesi quadre non è indicato alcun valore''</font>
 
  Dim j As Byte
 
 
 
  For j = 0 To 9
 
 
<FONT color=gray>' ''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:''</font>
 
      bb.<FONT color=#B22222>Add</font>(j)
 
 
  Next
 
 
'''End'''
 
 
 
 
 
 
 
==Definizione dinamica degli elementi in una Matrice==
 
L'incremento dinamico, in quantità indefinita, del numero degli elementi delle dimensioni di un ''[http://it.wikipedia.org/wiki/Array#Array_multidimensionali Vettore multidimensionale]'', o ''[http://it.wikipedia.org/wiki/Matrice Matrice]'', non è possibile mediante la funzione ''.Add()'', come lo è invece per quello monodimensionale. Per ottenere l'incremento in modo indefinito e dinamico degli elementi, bisognerà apportare di volta in volta innanzitutto un incremento della quantità nella ''definizione'' stessa degli elementi di quella dimensione. E', cioè, necessario incrementare volta per volta l'indicazione della quantità degli elementi all'atto della creazione dell'array. In questo modo sarà possibile utilizzare i nuovi elementi generati nel loro numero come ri-definito.
 
<BR>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
 
 
<FONT color=gray>' ''Definiamo la "nuova" quantità di righe della Matrice bidimensionale''
 
' ''con un nuovo valore superiore di un'unità rispetto al precedente:</font>
 
  bb = New Byte[<FONT color=#B22222>b</font>, 3]
 
 
  bb[b - 1, 1] = b
 
 
  Print bb[b - 1, 1]
 
 
'''End'''
 
 
 
 
 
 
 
==Modifica successiva della definizione 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()
 
 
<FONT color=gray>' ''Facciamo l'esempio con un vettore con numero di elementi non definito''
 
' ''e con un vettore avente un numero di elementi già dichiarato:''</font>
 
  Dim a As New Byte[2]
 
  Dim b As New Byte[]
 
 
 
 
<FONT color=gray>' ''Verifica dello stato iniziale del numero degli elementi del vettore:''</font>
 
Print a.Count
 
 
<FONT color=gray>' ''Di seguito le tre modalità per la modifica del numero''
 
' ''già definito degli elementi di un vettore:''</font>
 
    a = [0, 1, 2]
 
Print a.Count
 
 
    a.Add(99)
 
Print a.Count
 
 
<FONT color=gray>' ''Variazione del numero degli elementi mediante il metodo ".Resize()":''</font>
 
    a.Resize(5)
 
Print a.Count
 
 
 
<FONT color=gray>'''''''''''''''''''''''''''''''</font>
 
 
 
<FONT color=gray>' ''Verifica dello stato iniziale del numero degli elementi del vettore:''</font>
 
Print b.Count
 
 
<FONT color=gray>' ''Di seguito le tre modalità per la modifica del numero''
 
' ''non predefinito degli elementi di un vettore:''</font>
 
    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. In questo caso si provvede 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[]  <FONT color=gray>' ''dichiara l'array, ma senza definirne la quantità degli elementi''</font>
 
 
 
<FONT color=gray>' ''Dimensiona "ora" il vettore, in questo esempio con un "InputBox":''</font>
 
    qnt$ = InputBox("Inserisci tu la dimensione delle righe dell'array:")
 
 
    qntI = Val(qnt$)
 
 
<FONT color=gray>' ''Il vettore assume la quantità di elementi definiti manualmente con l'"InputBox":''</font>
 
    <FONT color=B22222>ii = New Integer[<B>qntI</b>]</font>
 
 
 
    For nu = 0 To ii.Max
 
<FONT color=gray>' ''Riempie ogni elemento dell'array, però, fino al suo numero massimo definito:''</font>
 
      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[<FONT color=B22222>Stat(</font>"''/percorso/del/file''"<FONT color=B22222>).Size</font>]
 
 
  bb.Read(fl)
 
 
  fl.Close
 
 
'''End'''
 

Versione attuale delle 09:13, 15 dic 2020