Trabajar con arrays. 2ª parte

En el anterior capítulo trabajamos con arrays y vimos los conceptos básicos de como crearlos, inicializarlos, redimensionarlos y eliminarlos. En este capítulo vamos a extender su conocimiento en base a las propiedades y métodos que llevan asociados los arrays.

A partir de este capítulo voy a empezar a utilizar las aplicaciones de consola de VB.NET para así poder adaptar tus estudios a los nuevos cursos de C# o Java que manejan al principio aplicaciones de consola.

El primer elemento que quiero que aprendas es la propiedad Length.

Aplicación de consola en VB.NET

En el anterior código puedes ver que la aplicación muestra los primeros 9 números de la serie Fibonacci. Para ello declaro un array del tipo integer y después declaro otra variable integer para usarla en el bucle for. Y utilizo la variable para llamarlo desde 0 hasta la longitud del array mediante la propiedad Length.

salida de length

La propiedad Length devuelve el número total de elementos que tiene el array. Esta propiedad es una propiedad que se usa en muchos ámbitos del lenguaje y en muchos objetos, pero conlleva unas reglas de usarlo como por ejemplo en el uso de arrays, ya que un array tiene un indice cero [0], por lo que Length contará todos los items del array. En el anterior ejemplo, el array miArray tiene 9 elementos porque estrictamente he declarado los nueve elementos. Pero si hubiese utilizado la inicialización sin contenido como Dim miArray(9), realmente el array tendrá 10 elementos que serán devueltos por la propiedad Length.

Es importante que sepas que los elementos del array cuando se declaran en vacio es una característica única de los arrays en VB.NET y que cualquier otro lenguaje de programación no lo trata de la misma manera como verás en Java y en C#.

Cadenas con formato.

Vamos a introducir al usuario en el manejo de las cadenas en aplicaciones de consola. Como has visto anteriormente utilizo el metodo WriteLine para mostrar por pantalla la salida de datos. Este método procede de la librería Console de .NET framework y posibilita la operación de salida y entrada de datos de las aplicaciones que lo utilizan. Como tiene una serie de métodos y propiedades añadidas a él, se puede utilizar en nuestros programas con un formato específico que llamamos indicadores. Por ejemplo podemos establecer el lugar en que aparecerá un dato usando el uso de llaves.

uso de llaves en console.writeLine

Así en el ejemplo anterior estamos refiriendonos a la primera posición del array con el indicador {0} que en el caso de la variable miArray sería igual a 0. Si quisieramos indicar más elementos seguiríamos recorriendo el bucle tal cual lo hace el bucle for (aunque manualmente podrías hacerlo fuera del bucle de la forma {1} para el segundo elemento, {2} para el tercero, etc., etc.), siempre que establezcamos los valores al lado de dichos objetos (pues sino no funcionaría):

Formas de utilizar los indicadores

Así queda claro que por cada llave hay que incluir fuera de las dobles comillas el valor del identificador a que apunta:

cada llave sustituye un valor

Esto es útil sobre todo cuando queremos mostrar un texto que esté en diferentes secciones del código.

Salto de línea.
Dentro de la consola podemos establecer el salto de línea con la instrucción vbCrLf aunque también se puede usar la constante CrLf integrada en el módulo ControlChars.

Para comprender estos conceptos, voy a usar una variable con un texto a mostrar e incluiré varios {0} para representar la nueva línea ({0} simula el salto de línea).

formatos varios de console{0}

Y siguiendo con el tema de los formatos, también podemos especificar el número de posiciones que ocupará un determinado número al ser representado:

formateo de caena con tres ceros a la derecha

Ten en cuenta que el valor entre llaves ante de los dos puntos, es la representación de los números a mostrar y no es un valor literal.

En el siguiente ejemplo, muestra una cadena de caracteres en forma de array. La salida está formateada para que se ajusten las cadenas en las posiciones de entre 1 y 7 hacia la derecha. Los valores de más de o igual a 7 caracteres, no se pueden alinear junto al resto de palabras, por lo que tienen que justificarse hacia la izquierda.

texto justificado a la izquierda por defecto

Como puedes ver, la cuarta y última palabra se escapan del rango de 7 espacios porque son mas largas.

Operaciones con arrays.

Como ya he mencionado anteriormente, las operaciones con arrays se pueden hacer de varias formas y maneras, utilizándo métodos y propiedades y asignando el valor al array u otro nuevo array. En esta sección vamos a empezar a operar con los arrays.

Métodos del array.
Ya hemos visto algunas propiedades de los arrays como por ejemplo la propiedad Length que devuelve el número de elementos del array. También está la propiedad Rank que devuelve el número de dimensiones que tiene un array (para arrays multidimensionales devolverá un número mayor de 1 según su dimensión). Pero lo que más vamos a usar junto a las propiedades indicadas anteriormente son los métodos. Los métodos son pequeñas funciones asociadas al objeto (en este caso array), que ofrecen funcionalidad y operaciones preconcebidas dentro del método.

En la siguiente dirección Métodos de arrays en VB, tienes la lista completa de las propiedades y métodos de los arrays. Aquí vamos a ver algunos de ellos.

El método Copy(), copia un intervalo de elementos de una matriz Array comenzando en el primer elemento y los pega en otra matriz Array comenzando en el primer elemento. La longitud se especifica como un entero de 64 bits.

En el siguiente ejemplo podrás ver que hago una copia literal del array m en r:

copia directa de array

En realidad estamos asignando el array m al array r, no estamos copiando su contenido. Solo hacemos que el array r apunte al contenido del array m, por lo que si se modifica el contenido de uno de los arrays se modificará en el otro (ya que comparten una única dirección de memoria).

Así si utilizo la instrucción m(2) = 4 después de asignar el valor de r a m, cambiará el array mostrado y en la posición 2 aparecerá un 4.

copia directa de array

Para copiar literalmente un array y convertirlo en otro independiente, se usa el método Copy() que copia el contenido del array m en otro diferente r; y si se modifica el array m, no afecta al contenido de r.

Para copiar el contenido de un array utilizamos el método Copy de la clase Array (hay que llamar a la clase en .NET Framework) para poder actuar sobre el método.

copia literal de un array

Pero el ejercicio nos devolverá un error porque recuerda que el array en VB.NET tiene una longitud extra que en cualquier otro sistema, y al hacer una copia literal de un array en otro, debemos de asegurarnos que la dimensión del nuevo array tenga la misma dimensión que el array copiado.

Para eso utilizamos la sentencia ReDim y le asignamos la longitud del array a copiar menos 1, de la forma siguiente:

ahora la copia es independiente

Observa que ahora, aunque cambie el valor del array m, no cambia el valor en el array r.

También el método Clone() realiza un clon del array. Es igual que usar el método Copy(), ya que genera un array independiente.

ahora la copia es independiente

También está el método Sort() que nos permite ordenar el array de forma ordenada. También hay que llamar a la clase Array para producir el ordenamiento.

ahora ordenamos el array desordenado

Por último, el método Reverse() invierte el orden del array.

Invierte el array

En la parte práctica empezaremos a crear arrays multidimensionales.