Skip to content

Tipos de Array en Delphi

Los Array nos permiten referirnos a una serie de variables con el mismo nombre utilizando un índice para la ubicación individual dentro de dicha serie. Los Array o Matrices tienen límites superiores e inferiores y los elementos son contiguos dentro de esos límites.

Los elementos de la matriz son valores del mismo tipo (string, integer, registros, objetos personalizados, etc).

En Delphi, hay dos tipos de Matrices o Array: una matriz de tamaño fijo que siempre permanece del mismo tamaño llamada: matriz estática; y una matriz dinámica cuyo tamaño puede cambiar en tiempo de ejecución.

Matrices estáticas o Array estaticos (Static Array)

Supongamos que estamos escribiendo un programa que permite al usuario ingresar una serie de valores com por ejemplo, el número de pacientes de un Doctor, al comienzo de cada día. Elegiríamos almacenar la información en una lista. Podríamos llamar a esta lista Pacientes, y cada número podría almacenarse como Pacientes[0], Pacientes[1], y así sucecivamente.

Para usar la lista, primero debemos declararla. Por ejemplo:

// Declaración de Matrices Estáticas
Var 
  Pacientes: array[0..6] of Integer;

En el ejemplo anterior declaramos una variable llamada Pacientes que contiene una matriz unidimensional (vector) de 7 valores de tipo integer. Dada esta declaración, debemos recordar que el primer indice de un Array es siempre el 0 (cero), por lo tanto y como el ejemplo lo demuestra, si declaramos una matriz de [0..6], tenemos 7 elementros dentro de ella.

Si creamos una matriz estática pero no le asignamos valores a todos sus elementos, éstos contentrán datos aleatorios; son como variables no inicializadas, contienen datos basura de la memoria RAM. El siguiente código se puede utilizar para inicializar valores por defecto, en este caso de los elementos de la matriz Pacientes en 0.

for k := 0 to 6 do 
  Pacientes[k] := 0;

Matrices dinámicas o Array dinámicos (Dinamic Array)

Existen casos en donde no sepamos que tamaño debe tener nuestra matriz y es posible aún que el tamaño de nuestra matriz deba cambiar en el transcurso del tiempo. Una matriz dinámica declara su tipo, pero no su tamaño. El tamaño real de una matriz dinámica se puede cambiar en tiempo de ejecución mediante el uso del procedimiento SetLength().

// Declaración de array dinámico
var
  Pacientes: Array of Integer;

En el ejemplo anterior declaramos una variable que contienen una matriz dinámica unidimensional de tipo integer. La declaración no asigna memoria para la variable Pacientes porque aún no sabe el tamaño a asignar. Para crear propiamente dicha la matriz en memoria, llamamos al procedimiento SetLength() como el ejemplo siguiente:

// Declaración de array dinámico
var
  Pacientes: Array of Integer;
begin
  SetLength(Pacientes, 7);
end;

El ejemplo anterior declara la variable Pacientes y le asigna 7 elementos de tipo integer.

Ahora, si queremos eliminar el espacio en memoria de la matriz dinámica, solo bebemos asignarla como null:

Pacientes := nil;

En conclusión, si en tiempo de desarrollo no conocemos el tamaño que debe tener una matriz, deberemos declaras una matriz dinánica.

Con las matrices dinámicas, podemos asignar solo la cantidad de almacenamiento que se requiere en un momento dado. En otras palabras, el tamaño de las matrices dinámicas se puede cambiar en tiempo de ejecución, que es una de las ventajas clave de las matrices dinámicas.