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 "Questo viene stampato, 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 Opzioni), 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 Funzioni per 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]