Los arrays, conocidos también como arreglos, vectores o matrices, son un tipo especial de variable que permite almacenar un grupo de datos o valores del mismo tipo. Una matriz es un conjunto de valores, que se denominan elementos, que están relacionados lógicamente entre sí. Por ejemplo, una matriz puede constar del número de alumnos de cada grado de una escuela gramatical; cada elemento de la matriz es el número de alumnos de un solo grado. Si bien la forma en que se almacenan en la memoria y la forma en que podemos hacer algunas acciones con estas en Visual Basic 2010 ha cambiado un poco, la forma en que podemos usarlas es idéntica a VB6.
Es posible usar variables individuales para almacenar cada uno de nuestros elementos de datos. Sin embargo, el control de un gran número de datos puede convertirse rápidamente en una tarea bastante engorrosa y difícil de mantener. Mediante el uso de una matriz, puede hacer referencia a estos valores relacionados por el mismo nombre y usar un número denominado índice o subíndice para identificar un elemento individual en función de su posición en la matriz.
Declaración de Arrays en Visual Basic
La declaración de una matriz se hace usando la palabra Dim, como se hace normalmente en la declaración de variables, pero va seguida de un paréntesis. En Visual Basic 2010, la declaración de un array, arreglo o vector se realiza de la misma forma que en Visual Basic 6, aunque algunos detalles cambiaron y es importante tenerlos en cuenta a la hora de declararlos.
Si se conoce el número de datos que se almacenarán, se puede poner este número, o más precisamente, el índice más alto, entre los paréntesis. Por ejemplo, para declarar una matriz que contendrá los datos de 11 jugadores de un equipo de fútbol, la sintaxis sería:
Dim Jugadores (10) As String
Lea también: Arreglos florales e IVA
Esto se debe a que una matriz está formada por una serie de elementos que comienza desde el número cero. En el ejemplo anterior, que tiene 11 elementos, se escribe 10 entre los paréntesis, porque se cuenta desde 0 hasta 10. Para ser más claro, entre paréntesis se escribe el total de elementos menos 1. Los índices de una matriz oscilan entre 0 y uno menor que el número total de elementos de la matriz. Por lo tanto, cuando se usa la sintaxis de Visual Basic para definir el tamaño de una matriz, se especifica su índice más alto, no el número total de elementos de la matriz.
Si el total de datos fuese 100, entonces entre paréntesis se escribiría 99, porque de 0 a 99 hay 100 datos. Si los datos en la matriz fuesen 509, entonces el número entre paréntesis sería 508.
Si se desconoce el número de elementos en el momento de la declaración, el paréntesis queda sin datos, indicando que el tamaño se definirá más adelante:
Dim Jugadores () As String
En VB6 existía la posibilidad de indicar cuál era el valor del índice inferior predeterminado de los arrays, pudiendo elegir entre cero y uno mediante la instrucción Option Base. Sin embargo, en los arrays de .NET, el índice inferior es siempre cero.
Lea también: cómo declarar tu amor con un arreglo floral
Asignación de Valores a una Matriz
Una vez creada la matriz, es necesario asignarle los valores haciendo referencia al número del elemento, como parte de la asignación. Por ejemplo, para asignar valores a la matriz de jugadores del equipo deportivo sería así:
Jugador(0)="Luis"
Jugador(1)="Luisito"
Jugador(2)="Oliver"
Jugador(3)="Tulio"
Jugador(4)="Marcos"
Jugador(5)="Fernando"
Jugador(6)="Logan"
Jugador(7)="Stephen"
Jugador(8)="Mike"
Jugador(9)="Mark"
Jugador(10)="Jimmy"
Otra manera de declarar la lista de valores es escribiéndolos en una sola línea, utilizando llaves para encerrar los elementos:
Dim Jugadores() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Observe que en este caso no se escribió el total entre paréntesis porque cada uno de los elementos se especificó entre las llaves. Cuando usted ingresa los datos entre las llaves, deben ir entre comillas (para cadenas) y separadas por una coma, y automáticamente el programa les asigna un número según el orden en que están escritos.
Lea también: cómo pedirle que sea tu novia de forma original
Con un literal de matriz, se puede rellenar una matriz con un conjunto inicial de valores al mismo tiempo que se crea. Cuando se crea una matriz mediante un literal de matriz, puede proporcionar el tipo de matriz o usar la inferencia de tipo para determinar el tipo de matriz. El tipo dominante es el tipo al que todos los demás tipos de la matriz pueden ampliarse. Por ejemplo, si la lista de valores proporcionados al literal de matriz contiene valores de tipo Integer, Long y Double, la matriz resultante es de tipo Double, dado que Integer y Long se amplían solo a Double.
Acceso a Elementos de Arrays
Si deseamos recuperar el valor de un elemento, debemos hacer referencia al número que se le asignó o que representa. Podemos almacenar y recuperar valores en una matriz haciendo referencia a cada ubicación de matriz mediante su índice entre paréntesis.
Es importante tener en cuenta que, si se intenta acceder a un índice mayor que el límite superior de la matriz, se generará un error. Por ejemplo, si una matriz tiene 11 elementos (índices de 0 a 10), no se puede escribir 11 para acceder a un elemento, ya que los elementos de la matriz son el total menos uno.
Tipos de Arrays
Arrays Unidimensionales
La matriz del ejemplo de los estudiantes es una matriz unidimensional porque usa un solo índice para acceder a sus elementos.
Arrays Multidimensionales
Una matriz que usa más de un índice o subíndice se denomina multidimensional. Los índices de matrices multidimensionales están separados por comas. También se puede crear y rellenar una matriz multidimensional usando literales de matriz anidados. Los literales de matriz anidados deben tener una serie de dimensiones coherentes con la matriz resultante.
Arrays Escalonados (Jagged Arrays)
Una matriz escalonada, que también se denomina matriz de matrices, está diseñada para escenarios donde la estructura de datos es bidimensional, pero no rectangular. Por ejemplo, se puede usar una matriz para almacenar datos sobre la temperatura alta de cada día del mes; la primera dimensión de la matriz representa el mes, pero la segunda dimensión representa el número de días, y el número de días de un mes no es uniforme. Una matriz escalonada es una matriz cuyos elementos también son matrices. En el ejemplo siguiente se usa una matriz de meses, donde cada elemento es una matriz de días, porque los distintos meses tienen diferentes números de días.
' Declare a jagged array with 31 elements.
El intento de usar literales de matriz anidados para asignar valores a una matriz escalonada (por ejemplo, Dim valuesjagged = {{1, 2}, {2, 3, 4}}) genera un error del compilador BC30568. Para corregir el error, incluya los literales de matriz interna entre paréntesis.
Una matriz escalonada es una matriz unidimensional cuyos elementos contienen matrices. La propiedad Array.Length y el método Array.GetLength(0) devuelven el número de elementos de la matriz unidimensional, mientras que Array.GetLength(1) produce una excepción IndexOutOfRangeException, ya que una matriz escalonada es multidimensional. Para determinar el número de elementos de cada submatriz, recupere el valor de la propiedad Array.Length de cada submatriz.
Visual Basic diferencia entre una matriz sin inicializar (una matriz cuyo valor es Nothing) y una matriz de longitud cero o vacía (una matriz que no tiene elementos). Una matriz sin inicializar es una que no se ha dimensionado ni tiene ningún valor asignado. Una matriz de longitud cero se declara con una dimensión de -1.
Redimensionamiento de Arrays
Si tiene una matriz existente, puede redefinir su tamaño mediante la instrucción ReDim. Puede especificar que la instrucción ReDim mantenga los valores que están en la matriz existente o puede especificar que cree una matriz vacía. Hemos usado Redim Preserve en lugar de Redim para conservar los valores anteriores de los elementos de la matriz.
Puede cambiar el tamaño de una variable de matriz asignando un nuevo objeto de matriz a ella o mediante la instrucción ReDim. Cuando se usa ReDim para redimensionar una matriz, Visual Basic crea una nueva matriz y libera la anterior, lo que puede consumir tiempo de ejecución.
Iteración y Propiedades de Arrays
Al recorrer en iteración una matriz, se accede a cada elemento de la matriz desde el índice más bajo hasta el más alto o viceversa. Normalmente, se usan las instrucciones For...Next o For Each...Next para recorrer los elementos de una matriz. Cuando no se conocen los límites superiores de la matriz, se puede llamar al método Array.GetUpperBound para obtener el valor más alto del índice. El método GetUpperBound tiene un parámetro que especifica la dimensión. El tamaño de una matriz es el producto de las longitudes de todas sus dimensiones y representa el número total de elementos contenidos actualmente en la matriz.
Puede encontrar el tamaño de una matriz mediante la propiedad Array.Length. La longitud de cada dimensión de una matriz se limita al valor máximo del tipo de datos Integer, que es Int32.MaxValue o (2 ^ 31) - 1. Sin embargo, el tamaño total de una matriz también está limitado por la memoria disponible en el sistema. El tamaño de una matriz es independiente del tipo de datos de sus elementos.
Cada matriz tiene un tipo de datos, que difiere del tipo de datos de sus elementos. No hay un tipo de datos único para todas las matrices; en su lugar, el tipo de datos de una matriz viene determinado por el número de dimensiones, o rango, de la matriz y el tipo de datos de los elementos de la matriz. Dos variables de matriz son del mismo tipo de datos solo cuando tienen la misma clasificación y sus elementos tienen el mismo tipo de datos. Cada matriz hereda de la clase System.Array y se puede declarar una variable para que sea de tipo Array, pero no se puede crear una matriz de tipo Array. Además, la instrucción ReDim no puede funcionar en una variable declarada de tipo Array.
Para devolver una matriz desde un procedimiento Function, especifique el tipo de datos de matriz y el número de dimensiones como tipo de valor devuelto de la instrucción Function. Dentro de la función, declare una variable de matriz local con el mismo tipo de datos y número de dimensiones. Para especificar una matriz como parámetro para un procedimiento Sub o Function, defina el parámetro como una matriz con un tipo de datos especificado y el número de dimensiones.
Operaciones Avanzadas con Arrays
División de Arrays
En algunos casos, es posible que tenga que dividir una sola matriz en varias matrices. Esto puede hacerse basándose en el número de elementos de la matriz, por ejemplo, para dividir una matriz en un número aproximado de partes iguales. También puede ser según el valor de un elemento, que actúa como delimitador para indicar dónde se debe dividir la matriz. Por ejemplo, se puede dividir una matriz de cadenas en dos matrices en función de la presencia de un elemento cuyo valor sea "zzz".
Combinación de Arrays
También es posible combinar una serie de matrices en una sola matriz mayor. Antes de copiar los elementos de cada matriz en la nueva matriz, primero debe asegurarse de que ha inicializado la matriz para que sea lo suficientemente grande como para acomodar la nueva. Use la instrucción ReDim Preserve para expandir dinámicamente la matriz antes de agregarle nuevos elementos. Si las matrices de origen son pequeñas, también podemos expandir dinámicamente la matriz a medida que agregamos los elementos de cada nueva matriz a ella.
Comparación con Colecciones
Las matrices son más útiles para crear y trabajar con un número fijo de objetos fuertemente tipados. Las colecciones, por otro lado, proporcionan una manera más flexible de trabajar con grupos de objetos. Si la colección contiene solo elementos de un tipo de datos, puede usar una de las clases del espacio de nombres System.Collections.Generic.
Ejemplos Prácticos de Arrays en Visual Basic
Ejemplo: Gestión de Jugadores de un Equipo de Fútbol
Para entender mejor el uso de arrays, consideremos un ejemplo práctico. Si deseamos almacenar los nombres de los once jugadores titulares de un equipo de fútbol, podemos crear una matriz para contener los datos. A continuación, crearemos una matriz con los 11 elementos de un equipo de fútbol. Si se inserta un número en un TextBox, el resultado será un mensaje relacionado con el jugador que corresponde al número asignado en la matriz. Como estamos hablando de un equipo titular de fútbol, el número no debe pasar de 10, que corresponde al jugador número once, porque en matrices o arrays se empieza a contar desde cero.
En este caso, el nombre de la matriz es Jugadores y está compuesta con once valores. Se utiliza CInt para convertir el valor de tipo String que se ingresa en el TextBox1.Text a un valor Integer (i). Y se usa MsgBox y el Ampersand "&" para mostrar en un mensaje el valor almacenado en la matriz correspondiente al número ingresado en la casilla, unido a la frase "es un jugador genial".
Ejemplo: Gestión de Ciudades
Considere otro proyecto para ver otra manera de asignar valores en una matriz. Se puede crear un proyecto con un Label, un Button y un TextBox. Al ejecutarlo e insertar un número entre 0 y 7, y luego hacer clic en el botón, se mostrará un mensaje en el Label referente a la ciudad correspondiente al número ingresado. Como son ocho los datos que contiene la matriz, si se ingresa un número mayor que 7, el programa generará un error, ya que, el elemento es igual al número del elemento menos uno.
Aplicación de Arrays en el Cálculo del ISR
Aunque el contenido proporcionado no detalla los cálculos específicos del Impuesto Sobre la Renta (ISR), los arrays son herramientas fundamentales en Visual Basic que pueden ser instrumental en la gestión de datos para dichos cálculos. Por ejemplo, se pueden utilizar arrays para:
- Almacenar las tablas de tarifas de ISR, donde cada elemento del array represente un tramo de ingresos o un porcentaje de impuesto aplicable.
- Guardar los rangos de ingresos para cada tramo de la tabla de ISR.
- Gestionar una lista de deducciones autorizadas o créditos fiscales aplicables.
- Almacenar datos de múltiples empleados o contribuyentes, donde cada fila de una matriz multidimensional podría representar a un individuo y cada columna un atributo como ingresos brutos, deducciones, etc.
La capacidad de los arrays para organizar datos homogéneos de manera estructurada simplifica el procesamiento y la aplicación de reglas fiscales complejas, permitiendo a los desarrolladores de Visual Basic crear sistemas robustos para el cálculo y la declaración de impuestos.
