GNU Info

Info Node: (gawk.info)Delete

(gawk.info)Delete


Next: Numeric Array Subscripts Prev: Scanning an Array Up: Arrays
Enter node , (file) or (file)node

The `delete' Statement
======================

   To remove an individual element of an array, use the `delete'
statement:

     delete ARRAY[INDEX]

   Once an array element has been deleted, any value the element once
had is no longer available. It is as if the element had never been
referred to or had been given a value.  The following is an example of
deleting elements in an array:

     for (i in frequencies)
       delete frequencies[i]

This example removes all the elements from the array `frequencies'.
Once an element is deleted, a subsequent `for' statement to scan the
array does not report that element and the `in' operator to check for
the presence of that element returns zero (i.e., false):

     delete foo[4]
     if (4 in foo)
         print "This will never be printed"

   It is important to note that deleting an element is _not_ the same
as assigning it a null value (the empty string, `""').  For example:

     foo[4] = ""
     if (4 in foo)
       print "This is printed, even though foo[4] is empty"

   It is not an error to delete an element that does not exist.  If
`--lint' is provided on the command line (*note Command-Line Options:
Options.), `gawk' issues a warning message when an element that is not
in the array is deleted.

   All the elements of an array may be deleted with a single statement
by leaving off the subscript in the `delete' statement, as follows:

     delete ARRAY

   This ability is a `gawk' extension; it is not available in
compatibility mode (Note: Command-Line Options.).

   Using this version of the `delete' statement is about three times
more efficient than the equivalent loop that deletes each element one
at a time.

   The following statement provides a portable but non-obvious way to
clear out an array:(1)

     split("", array)

   The `split' function (Note: String Manipulation Functions.
)  clears out the target array first. This call asks it to
split apart the null string. Because there is no data to split out, the
function simply clears the array and then returns.

   *Caution:* Deleting an array does not change its type; you cannot
delete an array and then use the array's name as a scalar (i.e., a
regular variable). For example, the following does not work:

     a[1] = 3; delete a; a = 3

   ---------- Footnotes ----------

   (1) Thanks to Michael Brennan for pointing this out.


automatically generated by info2www version 1.2.2.9