Successivo: , Precedente: , Su: Vettori   [Contenuti][Indice]


8.4 L’istruzione delete

Per rimuovere un singolo elemento da un vettore si usa l’istruzione delete:

delete vettore[espressione-indice]

Una volta che un elemento di un vettore è stato eliminato, il valore che aveva quell’elemento non è più disponibile. È come se quell’elemento non sia mai stato referenziato oppure come se non gli sia mai stato assegnato un valore. Il seguente è un esempio di eliminazione di elementi da un vettore:

for (i in frequenze)
    delete frequenze[i]

Quest’esempio rimuove tutti gli elementi dal vettore frequenze. Una volta che un elemento è stato eliminato, una successiva istruzione for che visiti il vettore non troverà quell’elemento, e l’uso dell’operatore in per controllare la presenza di quell’elemento restituisce zero (cioè falso):

delete pippo[4]
if (4 in pippo)
    print "Questo non verrà mai stampato"

È importante notare che eliminare un elemento non è la stessa cosa che assegnargli un valore nullo (la stringa vuota, ""). Per esempio:

pippo[4] = ""
if (4 in pippo)
  print "Questa riga viene stampata, anche se pippo[4] è vuoto"

Non è un errore eliminare un elemento che non esiste. Tuttavia, se viene data l’opzione --lint sulla riga di comando (vedi la sezione Opzioni sulla riga di comando), gawk emette un messaggio di avvertimento quando viene eliminato un elemento che non è presente in un vettore.

Tutti gli elementi di un vettore possono essere eliminati con una singola istruzione omettendo l’indice nell’istruzione delete, in questo modo:

delete vettore

L’uso di questa versione dell’istruzione delete è circa tre volte più efficiente dell’equivalente ciclo che elimina gli elementi uno alla volta.

Questa forma dell’istruzione delete è ammessa anche da BWK awk e da mawk, e anche da diverse altre implementazioni.

NOTA: Per molti anni, l’uso di delete senza un indice era un’estensione comune. A settembre 2012 si è deciso di includerla nello standard POSIX. Si veda il sito dell’Austin Group.

La seguente istruzione fornisce un modo portabile, anche se non evidente, per svuotare un vettore:43

split("", vettore)

La funzione split() (vedi la sezione Funzioni di manipolazione di stringhe) dapprima svuota il vettore indicato. La chiamata chiede di dividere la stringa nulla. Poiché non c’è nulla da dividere, la funzione si limita a svuotare il vettore e poi termina.

ATTENZIONE: L’eliminazione di tutti gli elementi di un vettore non cambia il suo tipo; non si può svuotare un vettore e poi usare il nome del vettore come scalare (cioè, come una variabile semplice). Per esempio, questo non è consentito:

a[1] = 3
delete a
a = 3

Note a piè di pagina

(43)

Un ringraziamento a Michael Brennan per la segnalazione.


Successivo: , Precedente: , Su: Vettori   [Contenuti][Indice]