Trabajar con arrays.

Cuando hablamos de matrices no nos estamos refiriendo a las variables matemáticas que hacen posible operaciones aritméticas de diferente dificultad. No, en programación las matrices o arrays son objetos que sirven para acumular varias variables en una misma dirección de memoria.

Cada vez que utilizas una variable o constante en tu programa Visual Basic.NET, dicha variable se guarda automáticamente en una dirección de memoria que el CLR escoge convenientemente. Además las variables tienen un tamaño específico, lo cual ocupan un lugar y un espacio en memoria.

Cuando programas un array o matriz, lo que estás haciendo es reservar una zona de la memoria y un espacio para dicha zona en la cual acumularás tantas variables como espacio hayas reservado. Por esa razón, cuando declaras un array, debes de indicar el tipo de variable y el número máximo de elementos que contendrá el array.

Trabajar con arrays no es tan difícil como hacerlos con matrices reales, pero tiene su forma de proceder a ello.

Por ejemplo, imagina que un array tiene acumulada 5 variables. Sabemos que el CLR ha acumulado 5 espacios de memoria para dicho array y que el espacio de memoria reservado varía en función del tipo de variable que se haya declarado.

Supón que queremos utilizar solo una de la variable que está en el array. Para ello, solo debemos de llamar al número dentro del array que representa. Por ejemplo imagina que queremos llamar a la variable que está en la posición cuarta. Deberíamos pedir que nos devolviesen el valor de dicha posición mediante la forma variable[3] para que CLR nos devolviera el valor de dicha variable.

Pero vamos paso a paso.

Declaración de arrays.
Un array se declara de la misma forma que una variable normal, pero la única diferencia está en que se debe de poner entre paréntesis el valor máximo que ocupará el array (el valor máximo en cuanto a variables tendrá). Por tanto un array sería:

Dim grupo (5) as integer

El array anterior define un array llamado grupo en el cual existen 5 variables del tipo integer, lo cual CLR reservará en memoria el valor del mismo (4294967296 = 4 bits) por cada uno de los elementos del array, es decir 4 x 5 = 20 bits.

Es importante tener claro el tamaño que ocupará el array en memoria ya que de ser limitada la memoria del dispositivo que ejecutara el programa con el array establecido tendría el riesgo de no poder ejecutarse correctamente o producir fallo en el sistema.

Otro detalle importante es el hecho de que el array empieza con el sistema cero, es decir el array anterior está compuesto de:

grupo (0) as integer
grupo (1) as integer
grupo (2) as integer
grupo (3) as integer
grupo (4) as integer

Observarás que no existe array (5), ya que al igual que en la declaración de cadenas e Ítems, el valor cero es el primer valor que tiene en cuenta el CLR de Visual Basic.NET.

redimensionar arrays.
Supón que en tu programa quieres guardar en forma de array ciertos valores que se generan en la aplicación, para que así no tengas que crear nuevas variables. Lo bueno de los arrays en cualquier lenguaje de programación es que, la mayoría son redimensiónales, es decir, se pueden volver a escribir. En nuestro ejemplo anterior, supón que queremos agregar más variables al array anterior. Para proceder se usa la instrucción REDIM (redimensión) para volver a rediseñar el array.

Para usarla solo debemos de llamar al array y asignarle el nuevo número de elementos que contendrá, tal como se muestra a continuación.

Redimensionar un array

Ahora el array grupo contendrá siete elementos en vez de cinco. Como puedes ver no es necesario que llames al tipo de variable, ya que está guardado en memoria (cuando declaraste la anterior array). Simplemente añades más elementos.

También se puede suprimir elementos siempre que no estén en uso:

redimensionar a menos el array

Esta instrucción redimensiona el array y reduce sus elementos.

Inicializar el array.

Como has visto, hemos creado un array con un número de elementos (a partir de ahora items), que reservan un espacio en memoria para todo su contenido. En nuestro ejemplo no hemos asignado ningún valor a cada Ítem del array, lo cual CLR reserva todo el espacio para cada item.

En Visual Basic.NET podemos establecer un valor fijo para cada item del array. Para ello, se puede proceder de dos maneras:

  • Cuando se inicializa el array se dan los valores de cada Ítem.
  • Se establecen los valores independientemente.

En el primero, se suele proceder dejando los paréntesis vacíos y asignando los valores dentro de una apertura y cierre de llave, tal como:

otra forma de crear la matriz

Como puedes ver, cada valor separado por coma, pertenece a un item del array. Puedes observar que a pesar de no haber introducido ningún valor en este array entre paréntesis, al haber asignado cinco valores en concordancia con el tipo de variable, el array queda redimensionado automáticamente y con un valor de 5 items en su interior. Además cada item, tiene un valor numérico específico, lo cual hace que el CLR no reserve toda la memoria específica para ese tipo de array ahorrando espacio de la misma.

La otra forma de dar valor a cada item es hacer que, una vez creada el array, dar valor a cada item mediante la fórmula siguiente:

array(item) = valor

Por lo que en nuestro ejemplo, imagina que queremos asignar al primer item, un valor de 10. Deberíamos de proceder así:

asignar un valor a un item

Ahora en nuestro array, el item primero (0) vale 10. No es obligatorio asignar valores a un array; puedes añadirles valores más tarde.

Redimensionar un array con valores.
Existe la posibilidad de que tengas que redimensionar a lo largo de tu aplicación. Eso no es ningún problema como ya has observado. El problema pudiera existir si el array tiene valores introducidos en cada item. Supón en nuestro ejemplo anterior los valores de nuestro array:

Dim grupo () As Integer = {1, 2, 3, 4, 5}

En esta condición el array vale grupo(5). Si ahora redimensionamos el espacio del array, veremos que se han borrado los valores de los items, y que el nuevo array tiene 10 items vacíos:

al redimensionar cambia el valor de los items

Para evitar que se produzcan errores en la redimensión y no se pierda los Ítems almacenados se tiene que utilizar la instrucción PRESERVE:

Dim grupo () As Integer = {1, 2, 3, 4, 5}
ReDim Preserve grupo(10)

En esta instrucción lo que hacemos es "preservar" los valores almacenados en el array antes de proceder a su redimensión. Ahora sí, se guardan los valores anteriores al redimensionar el array:

preserve guarda los valores originales

Esta claro que cuando sobrepase el item 5, el siguiente valor devuelto será un cero, ya que no se ha incluido valores para los items desde el 5 hasta el 10.

Manipulación de arrays.

Como puedes ver hasta ahora, el array se puede manipular al igual que una variable o constante, simplemente hay que asignar un item para sacar su valor o para insertar un valor específico en él.

En programación se suele asignar directamente valores a los arrays, pero también se suele hacer que sea el propio programa el que inserte los valores de los arrays tal y como se muestra en el ejercicio siguiente:

asignación automática del ancho del array

Puedes ver que el programa te pide que insertes los valores que tendrá el array. Ahora para comprobar los valores simplemente debes de verlos mediante el bucle For correspondiente.

Si has sido observador, podrás ver que cuando declaramos un array y definimos el número máximos de elementos que contendrá, vemos que cuando lo reproducimos podemos ver siempre el valor del array +1. Eso es debido siempre al item cero.

Así que si designamos un array con 5 item, lo que realmente nos va a crear el sistema es un array con 6 elementos (0, 1, 2, 3, 4, 5), pues al crear un array y asignarle un número de item, estás indicando un tope numérico.

También podemos cambiar el número almacenado en el interior del item del array. Para ello, simplemente llama al item en cuestión y asígnale otro valor establecido

Dim grupos(5) As Integer
grupos(2) = 100

En el ejemplo anterior he creado un array con 6 elementos y al tercer elemento (ten en cuenta el item cero), le he asignado el valor de 100. Cambiar el valor de un item es tan fácil como asignar un nuevo valor al mismo. Pero ten en cuenta que para cambiarlo, el programa no debe de estar utilizando el valor en concreto, pues de lo contrario podría producirse un error de sobre escritura.

ELiminación de un array.
Es muy común en programación usar arrays para después eliminarlos. Cuando se elimina un array se está recuperando el espacio en memoria que ocupa dicho elemento, lo cual agiliza la velocidad del programa.

Para eliminar completamente un array se utiliza la instrucción ERASE y se llama al array. En nuestro ejemplo, queremos eliminar el array grupos:

Erase grupos()

En la memoria del ordenador ya no quedará constancia del array y entonces se liberará ese espacio ocupado por el mismo, en la memoria.

eliminar un array con erase

El siguiente programa daría un error de lectura, ya que principalmente creamos un array con seis elementos y al tercer elemento le asignamos un valor de 300. Inmediatamente, el array queda eliminado. En la siguiente línea, hacemos que se muestre el valor del item tercero en pantalla, pero como hemos eliminado el array entero de la memoria, el programa no puede acceder a la misma y genera un NullReferenceException. Por eso es muy importante que cuando vayas a manipular información, ésta esté disponible.

error al no encontrar la referencia

Array de String.
Hasta ahora hemos visto como los arrays pueden ser manipulados y tener contenido numérico. Pero los arrays permiten almacenar cualquier tipo de dato permitido por Visual Basic.NET.

Si es verdad que la mayoría de los datos que manipulan los arrays son los datos numéricos y los datos alfanuméricos. Como también manipulan cadenas de caracteres, podemos establecer arrays de String.

Un array de String es similar a cualquier otro array; se crea de la misma forma, se manipula de igual manera, se redimensiona, etc. Lo único que hay que tener en cuenta a la hora de utilizarlo o crearlo es que el valor que contenga dentro de cada item debe de estar entre comillas dobles para que no genere error el CLR al compilarlo.

De ésta forma, y siguiendo nuestro ejemplo creamos nuestro array de String:

Dim grupo () As String = "Hola", "Mundo"}

La creación y el diseño del array siguen siendo iguales, pero se debe de poner las dobles comillas.

Bueno, vamos a dejar la introducción a las matrices por ahora. En el siguiente capítulo verás las propiedades y métodos asociados a las matrices, para así poder manipular los elementos de un array dimensional. Ahora puedes pasar a la zona de prácticas .