Porre a zero i valori contenuti da un Vettore
Per porre a zero uno o più valori contenuti da un Vettore, si potranno adottare almeno quattro modalità.
Indice
- 1 Azzerando direttamente ciascun elemento del vettore
- 2 Usando il Metodo .Copy( ) di un'altra variabile vettoriale d'appoggio
- 3 Uso del metodo .Fill() della variabile vettoriale
- 4 Uso dei Memory Stream
- 5 Uso del file-device /dev/zero
- 6 Uso della funzione esterna bzero() della libreria di C
- 7 Uso della funzione esterna memset() della libreria di C
Azzerando direttamente ciascun elemento del vettore
La prima modalità più diretta e più intuitiva è quella di azzerare ciascun elemento del vettore:
Public Sub Main() Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9] Dim b As Byte For b = 0 to bb.Max bb[b] = 0 Next ' Vediamo in console il risultato: For Each b In bb Print b Next End
Usando il Metodo .Copy( ) di un'altra variabile vettoriale d'appoggio
Questa modalità prevede di assegnare al vettore tutti i valori - preimpostati a zero - di un altro vettore mediante il suo Metodo .Copy( ):
Public Sub Main() Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9] Dim zero As Byte[] Dim b As Byte zero = New Byte[bb.Count] bb = zero.Copy(0, zero.Count) ' Vediamo in console il risultato: For Each b In bb Print b Next End
Uso del metodo .Fill() della variabile vettoriale
Si potrà fare uso del metodo .Fill() della variabile vettoriale, il quale riempie di un dato valore uno o più elementi della predetta variabile.
Mostriamo un semplice esempio, nel quale azzereremo quattro elementi di un Vettore:
Public Sub Main() Dim b As Byte Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9] bb.Fill(0, 3, 4) ' Vediamo in console il risultato: For Each b In bb Print b Next End
Uso dei Memory Stream
Come sappiamo la risorsa Memory Stream consente di scrivere nell'area di memoria puntata da una variabile di tipo Puntatore. Utilizzando la proprietà .Data di una variabile vettoriale, potremo azzerare uno o più valori presenti nel Vettore.
Mostriamo un semplice esempio:
Public Sub Main() Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9] Dim st As Stream Dim b As Byte st = Memory bb.Data For Write ' Azzeriamo quattro valori di seguito cominciando dal byte di indice 2: Seek #st, 2 For b = 1 to 4 write #st, 0 As Byte Next st.Close ' Vediamo in console il risultato: For Each b In bb Print b Next End
Uso del file-device /dev/zero
E' possibile utilizzare il file-device /dev/zero, il quale restituisce un flusso di valori zero &h00:
Public Sub Main() Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8] Dim fl As File Dim b As Byte fl = Open "/dev/zero" For Read bb.Read(fl, 0, bb.Count) For Each b In bb Print b Next fl.Close End
Uso della funzione esterna bzero() della libreria di C
Questa modalità prevede l'uso della funzione esterna bzero() della libreria di C, e della proprietà .Data della variabile vettoriale.
Ne mostriamo un esempio:
' void bzero (void *__s, size_t __n) ' Set N bytes of S to 0. Private Extern bzero(__s As Pointer, __n As Long) In "libc:6" Public Sub Main() Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9] Dim b As Byte ' Ora azzeriamo quattro valori di seguito cominciando dal byte di indice 2: bzero(bb.Data + 2, 4) ' Vediamo in console il risultato: For Each b In bb Print b Next End
Uso della funzione esterna memset() della libreria di C
Si può anche utilizzare della funzione esterna memset() della libreria di C, e della proprietà .Data della variabile vettoriale.
Ne mostriamo un esempio, in cui azzeriamo tutti i valori del vettore:
' void *memset(void *str, int c, size_t n) ' Copies the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str. Private Extern memset(s As Pointer, c As Integer, n As Long) In "libc:6" Public Sub Main() Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9] Dim b As Byte ' Ora azzeriamo tutti i valori del vettore: memset(bb.Data, 0, bb.Count) ' Vediamo in console il risultato: For Each b In bb Print b Next End