Array: creazione, modifica e riempimento

Da Gambas-it.org - Wikipedia.

Un array, o vettore, è una struttura ordinata - come una sorta di lista - di dati appartenenti al medesimo tipo.
Ogni elemento costitutivo di tale struttura di dati omogenei ha un ordine preciso all’interno della lista, ed è identificato da un "indice" univoco che inizia da zero. Infatti i dati dell'array sono immagazzinati in un'area di memoria in modo contiguo, ossia in modo tale che in memoria i dati dell'array - seguenti il primo appartenente a tale array - sono salvati l'uno immediatamente dopo l'altro senza alcuna soluzione di continuità.

ARRAY
Indice 0Indice 1Indice 2Indice 3etc......
1° dato2° dato3° dato4° datoetc......


In Gambas possiamo suddividere gli array, o vettori, sotto due profili:

  • della definizione del numero della propria "dimensione" (in questa pagina prenderemo in considerazione solo i vettori ad "una" dimensione).
  • della definizione del numero dei propri "elementi";

Con riguardo al secondo profilo possiamo ulteriormente suddividere i vettori in due tipi:
1) vettori con quantità definita dei propri elementi;
2) vettori con quantità non definita dei propri elementi.

Il suddetto primo tipo può essere a sua volta distinto in:
a) vettori con definizione esplicita dei valori presenti nei suoi elementi (inizializzazione);
b) vettori con definizione implicita dei valori presenti nei suoi elementi.

Nel vettore con definizione esplicita dei valori la quantità degli elementi è definita in modo esplicito ed evidente ponendo fra parentesi quadre e saparati da virgole i valori medesimi.
La definizione esplicita (inizializzazione) può essere fatta con la dichiarazione della variabile vettoriale (l'array può essere dichiarato e inizializzato allo stesso tempo):

Dim vettore As Integer[] = [1100, 2200, 3300, 4400]

oppure successivamente:

Dim vettore As Integer[]
.....
vettore = [11, 22, 33, 44]

Nel caso in cui i valori non sono esplicitati, essi potranno essere attribuiti a ciascun elemento in modo dinamico mediante i Metodi ".Add()" o ".Push()" tipici dell'Oggetto Array.

Ad ogni modo, un vettore, sia con numero definito di elementi, sia con numero non definito di elementi, è suscettibile di incrementare, ogni qualvolta lo preveda il codice, la quantità dei propri elementi mediante i predetti appositi Metodi ".Add()" e ".Push()".

Creazione di un array monodimensionale senza definizione del numero dei suoi elementi

Un array a una dimensione (monodimensionale) privo di definizione del numero dei suoi elementi può dichiarato ponendo:

  • il nome identificatore della variabile vettoriale;
  • il tipo di dato assunto dal vettore;
  • due parentesi quadre prive al loro interno di qualsiasi carattere.

Esempio:

Dim vettore As Integer[]

La sola e mera dichiarazione dell'array (vettore) non è sufficiente per la creazione (istanziazione) dell'array, e dunque con il conseguente uso delle previste sue risorse native (Proprietà e Metodi).
Infatti, per creare (istanziare) un array (vettore) senza definizione del numero dei suoi elementi è necessario (come già accennato) utilizzate la parola-chiave New.
Esempio:

Dim vettore As New Byte[]

oppure successivamente nel corpo della routine:

Dim vettore As Byte[]

vettore = New Byte[]

In maniera analoga in caso di dichiarazione di una variabile Globale di un vettore di dati:

Private vettore As New Byte[]

oppure successivamente nel corpo della routine:

Private vettore As Byte[]


Public Sub ......

 vettore = New Byte[]

Più in particolare con la parola-chiave New viene creato (istanziato) un Oggetto di tipo Array, per la complessa organizzazione interna del quale Gambas alloca in sostanza la necessaria memoria.

Incremento degli elementi

La parola-chiave New è necessaria, dunque, per poter effettuare l'incremento del numero dei suoi elementi interni mediante i Metodi ".Add()" o ".Push()", che avviene con la contestuale assegnazione di un determinato valore a ciascun nuovo elemento incrementato.
Esempio:

Public Sub Main()

 Dim bb As New Byte[]  ' All'interno delle parentesi quadre "non" è indicato alcun valore
 Dim j As Byte

' Allo stato iniziale in questo caso il numero degli elementi del vettore è uguale a zero:
  Print bb.Count
  
  For j = 0 To 9
  
' Ad ogni ciclo mediante il Metodo ".Push()" (si può usare anhe il Metodo .Add() ) viene incrementato di una unità il numero degli elementi del vettore.
' Pertanto viene creato un nuovo elemento di indice successivo all'ultimo che era stato generato.
' Intanto al nuovo elemento attribuito al vettore viene contemporaneamente assegnato un valore.
    bb.Push(j)
   
  Next
  
' Al termine il numero degli elementi del vettore è incrementato. In tal caso è uguale a 10.
  Print bb.Count

End


Creazione di un array monodimensionale con definizione del numero dei suoi elementi

Un array monodimensionale con definizione del numero dei suoi elementi sarà creato in maniera analoga a quella degli array senza definizione del numero dei suoi elementi, con la differenza, però, che all'interno delle parentesi quadre sarà specificato il numero degli elementi che compongono il vettore.
Esempio:

Dim vettore As New Byte[8]

Se il vettore viene creato non contestualmente alla sua dichiarazione, è possibile definire numero degli elementi di un vettore anche impostando il suo valore tra parentesi "tonde", da porre alla destra delle due parentesi "quadre" (che devono ovviamente restare vuote):

Public Sub Main()

 Dim ii As Integer[]
 
 ii = New Integer[](32)
 
 Print ii.Count
 
End

Va sottolineato che con la definizione esplicita dei valori, contenuti dal vettore, la creazione dell'Oggetto Array avviene automaticamente, non risultando così necessaria in tal caso l'uso della parola-chiave New:

Dim vettore As Integer[] = [1100, 2200, 3300, 4400]

Definizione del numero degli elementi di un vettore mediante una Funzione

E' possibile attribuire il numero degli elementi di un vettore anche attraverso una Funzione che ritorni un valore intero.

Esempio:

Public Sub Main()

 Dim ii As Integer[]
 
 ii = New Integer[Elementi(8)]
 
 Print ii.Count

End

Private Function Elementi(i As Integer) As Integer
 
 Return i * 8
 
End

Incremento degli elementi

Anche nel caso di array con dichiarazione del numero degli elementi, l'incremento del loro numero avviene mediante i Metodi ".Add()" o "Push()", che avviene con la contestuale assegnazione di un determinato valore a ciascun nuovo elemento incrementato.

Esempio:

Public Sub Main()
 
 Dim bb As New Byte[4]

' Verifica dello stato iniziale del numero degli elementi del vettore:
 Print bb.Count

' Variazione del numero degli elementi mediante il metodo ".Push()" (si può usare anhe il metodo .Add() ):
 bb.Push(99)
 
' Verifica del risultato:
 Print bb.Count
  
End

L'incremento avvenire anche con successiva esplicitazione degli elementi:

Public Sub Main()
 
 Dim bb As New Byte[4]
 
 Print bb.Count
  
 bb = [1, 2, 3, 4, 5]
 Print bb.Count, bb[4]
  
End

Variazione del numero degli elementi di un array mediante il Metodo ".Resize()"

La variazione - in incremento e in decremento - del numero degli elementi di un array può avvenire mediante il Metodo ".Resize()" dell'Oggetto Array. Se la variazione è in incremento, allora i nuovi elementi risulteranno istanziati a zero.

Esempio:

Public Sub Main()
 
 Dim bb As New Byte[4]

' Verifica dello stato iniziale del numero degli elementi del vettore:
 Print bb.Count
  
' Variazione del numero degli elementi mediante "dichiarazione esplicita":
 bb = [0, 1, 2, 3]
 Print bb.Count
 
' Variazione in incremento del numero degli elementi mediante il metodo ".Resize()":
 bb.Resize(8)
 Print bb.Count, bb[6]
  
' Variazione in diminuzione del numero degli elementi mediante il metodo ".Resize()":
 bb.Resize(3)
 Print bb.Count, bb[2]
  
End

Creazione di un array monodimensionale annidato

Similmente per le matrici annidate [Nota 1] un array monodimensionale annidato non può essere locale, e pertanto va dichiarato prima della routine, all'esterno, e senza la parola-chiave "New". La dimensioni ed il numero degli elementi del vettore annidato sono definiti con la notazione: variabile[n] .

Esempio:

Private annidato[8] As Integer

Public Sub Main()
 
 Dim i As Integer
 
 For i = 0 To 7
' Assegna un valore a ciascun elemento del vettore annidato:
   annidato[i] = 1000 * i
 Next
 
End


Attribuzione dei valori agli elementi di un array

l'attribuzione di valori agli elementi è possibile solo se è stato creato, nelle modalità sopra esposte, l'Oggetto Array.

Più in particolare, con riferimento ad un vettore privo di definizione del numero dei propri elementi l'attribuzione può avvenire:
1) all'atto della esplicitazione degli elementi;
2) contestualmente e mediante l'incremento del numero dei propri elementi mediante i previsti Metodi ".Add()" o ".Push()".

Con riferimento invece agli array aventi un numero definito di elementi, e comunque in ogni caso in cui l'array abbia almeno un elemento, l'attribuzione di un valore avvenire mediante assegnazione del medesimo all'indice relativo all'elemento:

Public Sub Main()
 
 Dim vettore As New Short[4]
  
  vettore[2] = 1234
  
  Print vettore[2]
  
End


Note

[1] Per gli array annidati vedere questa pagina: Array annidati