Arrays asociativos

Son “look-up tables” y equivaldrían a los hashes de Perl

Su sintaxis es :

data-type  array-name  [ index-data-type | * ]

Siendo el index-data-type:

  • indefinido: mediante un *, indicando que el tipo es cualquier tipo de dato integral
  • En cualquier otro caso debe ser: string, int, integer,  (un)signed packed array, or (un)packed structure

Ejemplo1:

Ejemplo2:

Métodos predefinidos:

Función Parámetros Resultado
num() Devuelve número de elementos
delete() índice (por valor) Borra elemento indicado
exists() índice (por valor) Indica si el elemento existe
first() índice (por referencia) Asocia el índice del primer elemento al parámetro (devuelve cero si el array está vacío)
last() índice (por referencia) Asocia el índice del último elemento al parámetro (devuelve cero si el array está vacío)
next() índice (por referencia) Asocia el índice del siguiente elemento al parámetro (devuelve cero si el array está vacío)
prev() índice (por referencia) Asocia el índice del anterior elemento al parámetro (devuelve cero si el array está vacío)

Ejemplo de aplicación

Queremos hacer un detector de tipos de paquetes ethernet y que almacene ordenadamente en un array las ocurrencias de cada tipo.

Dado que el tipo ethernet tiene 16 bits necesitaríamos un array de 65536 posiciones ; pero normalmente en una red local no aparecen tantos tipos distintos ni muchísimo menos Ø

Podríamos pensar en poner un array bidimensional de Nx2 enteros, siendo una columna para el tipo y otra para en cuantos paquetes se ha detectado ese tipo, pero necesitaríamos además funciones de búsqueda y ordenación. Además está el problema de qué pasa si se nos llena.

Solución: usar un array asociativo.