0% encontró este documento útil (0 votos)
9 vistas16 páginas

7 Arrays

El documento describe cómo crear y manipular variables que almacenan múltiples valores en PowerShell, centrándose en arrays y tablas Hash. Se explican las diferencias entre ambos, cómo acceder a sus elementos, recorrerlos, y añadir o eliminar valores. Además, se proporciona información sobre la sintaxis y ejemplos prácticos para facilitar su comprensión y uso.

Cargado por

Elias Barragan
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
9 vistas16 páginas

7 Arrays

El documento describe cómo crear y manipular variables que almacenan múltiples valores en PowerShell, centrándose en arrays y tablas Hash. Se explican las diferencias entre ambos, cómo acceder a sus elementos, recorrerlos, y añadir o eliminar valores. Además, se proporciona información sobre la sintaxis y ejemplos prácticos para facilitar su comprensión y uso.

Cargado por

Elias Barragan
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Variables que guardan múltiples valores

Introducción
En PowerShell tenemos dos formas diferentes de crear variables que contengan colecciones de
datos: los Arrays y las tablas Hash. Estas últimas también suelen recibir el nombre de arrays
asociativos.

En este apartado hablaremos de ambas.

Arrays
Básicamente, un array es una lista de valores, de cualquier tipo, que podemos identificar de forma
individual por la posición que ocupan dentro de la lista. Las posiciones de los diferentes elementos
se numeran a partir de cero.

Crear un array
A diferencia de lo que se hace en otros lenguajes de programación, en PowerShell no hay que definir
una variable de forma diferente para que actúe como un array. Es suficiente con asignarle un grupo
de valores, siguiendo este formato:

Por ejemplo, el siguiente código sería correcto:

Este es, digamos, el formato explícito. Sin embargo, también sería correcto usar expresiones como
estas:

o, incluso, usando un rango de valores:

Como hemos dicho más arriba, cada elemento de un array puede ser de un tipo diferente, aunque,
si necesitamos restringir el tipo de dato que podemos almacenar en ella, basta con indicarlo delante
del nombre de la variable. En ese caso, seguiremos el siguiente formato:
Aunque hemos utilizado el formato estándar, la definición explícita de tipo es válida también con la
sintaxis reducida que hemos visto antes:

o también:

Incluso podemos crear un array vacío al que ir añadiendo elementos más tarde:

Mostrar el contenido de un array


Si queremos ver en pantalla el contenido de todo el array en un momento dado, podemos utilizar la
misma técnica que con una variable simple:

Y el resultado será como el de la imagen siguiente.

Utilizar un elemento individual del array


Para acceder a un elemento concreto del array, basta con escribir su nombre seguido de la posición
que necesitamos encerrada entre corchetes. Por ejemplo, para mostrar el primer elemento del array
anterior, escribiríamos esto:

Y, como cabe esperar, el resultado será este:


Aunque, si lo que queremos es utilizar el elemento dentro de una expresión, nos limitamos a utilizar
la notación anterior como si se tratara de una variable simple. Por ejemplo, para incrementar en uno
el valor del elemento, haríamos esto:

o incluso esto:

En la siguiente imagen se ilustra el funcionamiento de ambas expresiones:

Arrays como objetos


Ya dijimos en otro apartado que, internamente, PowerShell trata a todas las variables como objetos.
Y, aunque aquí no profundicemos en los conceptos relacionados con la programación orientada a
objetos, sí debemos saber que, gracias a esta característica, disponemos de herramientas que nos
facilitan la creación, manipulación, búsqueda y ordenación de arrays.
Por ejemplo, si quisiéramos saber cuántos elementos tiene un array, bastaría con escribir lo
siguiente:

Y, como vemos a continuación, el valor devuelto para el array de ejemplo que hemos venido
utilizando, sería 4:

Para conocer en detalle todas las características de la clase Array, puedes recurrir al siguiente
enlace: [Link]

Recorrer un array
Muchas veces necesitamos realizar operaciones que afecten a todos los elementos de un array. Para
estas situaciones podemos utilizar una estructura repetitiva controlada por una variable que actúe
como índice del array.

Para entenderlo, quizás lo mejor sea recurrir a un ejemplo; veamos cómo multiplicar por dos cada
uno de los valores contenidos en un array:

Observa que la variable $i comienza con el valor cero y, en cada iteración, se incrementa en uno
hasta llegar al valor de la última posición del array. Luego, dentro del bloque de código, se utiliza la
variable $i para hacer referencia a un elemento particular del array (primero al de la posición 0,
luego al de la posición 1, etc.)

En la siguiente imagen puedes comprobar el resultado de ejecutar el ejemplo anterior:


Si necesitáramos recorrer el array en orden inverso, bastaría con modificar los valores de for:

Por supuesto, nos vale cualquier estructura repetitiva, siempre que actúe de forma equivalente a
ésta.

No obstante, recuerda que existe una de ellas que está específicamente diseñada para actuar sobre
colecciones de datos. Me refiero a la estructura foreach.

Una de las ventajas de usar foreach para recorrer un array es que no necesitamos una variable que
vaya tomando el valor de cada posición. Por ejemplo, si queremos resolver la tarea anterior, bastaría
con el siguiente código:

De cualquier modo, debemos tener en cuenta una sutil diferencia: mientras en el caso de for
estamos accediendo a un elemento del array cada vez, en el caso de foreach se hace una copia de
dicho elemento en la variable $elem. Esto significa que, al cambiar el valor de la variable $elem, no
estamos cambiando el valor original en el array. Para comprobarlo, observa la siguiente imagen con
el resultado de ejecutar el ejemplo anterior:
Observa que, por primera vez, hemos utilizado un argumento en el cmdlet Write-Host. Se trata de -
NoNewline, que evita que se produzca un cambio de línea después de ejecutarlo. Así, hemos
conseguido que todos los números mostrados en el interior de foreach aparezcan en la misma línea.

También hemos utilizado un carácter especial (`n) en el último Write-Host. En este caso, la intención
era, precisamente, producir un cambio de línea.

Otro inconveniente de foreach es que siempre recorre todo el array. Si necesitáramos recorrer sólo
algunas de sus posiciones, o no quisiéramos hacerlo en el orden preestablecido, quizás sería más
recomendable una estructura diferente.

Por ejemplo, imaginemos que tenemos un array que guarda nombres de productos en las posiciones
impares y su precio correspondiente en las posiciones pares. Para aplicar un descuento del 10% a
todos los productos, la solución más sencilla pasa por no utilizar foreach. Por ejemplo, podríamos
aplicar la siguiente solución:

Como PowerShell no tiene en cuenta los saltos de línea ni el exceso de espacios, hemos hecho
nuestro código más legible añadiéndolos según nuestro criterio.

Añadir y quitar valores en un array


Cuando necesitamos que un array crezca con nuevos elementos, basta con utilizar el operador de
suma (+). Por ejemplo, podemos crear un array vacío y añadir elementos a medida que los vaya
facilitando un usuario:
Su ejecución podría ser como sigue:

También podemos usar el operador de suma para unir dos listas y obtener una tercera:

Cuando comprobamos el resultado obtenemos algo así:


… Incluso podemos añadir una lista a otra:

Y comprobamos que también funciona correctamente:

En ocasiones, la salida de un cmdlet consiste en un array. Esto significa que podríamos asignarla
directamente a una variable de este tipo. Un ejemplo puede ser el cmdlet Get-ChildItem que ya
conocemos del capítulo anterior.

Get-ChildItem permite obtener la lista de archivos de una o varias rutas del disco

Para comprobar que su salida consiste en un array, bastaría con escribir lo siguiente:
Con el que obtenemos el siguiente resultado:

Como el resultado es satisfactorio, podemos utilizar un array para almacenar la información que nos
ofrece escribiendo algo así:

En realidad, Get-ChildItem devuelve un array de objetos donde cada uno representará un archivo del
directorio. A modo de ejemplo, la propiedad name de uno de esos objetos nos ofrecerá el nombre
del archivo correspondiente.

Sabiendo esto, podríamos utilizar una estructura repetitiva que recorra el array y nos muestre los
nombres de los archivos contenidos en el directorio. Algo así:

El resultado será así:


En cuanto a la eliminación de elementos de una array, no hay un procedimiento sencillo.
Probablemente la mejor solución consista en crear un array nuevo y asignarle únicamente los
valores que nos interese mantener. Por ejemplo, supongamos que, en el array anterior, únicamente
queremos mantener los nombres de los archivos que comiencen con la letra ‘D’. Podríamos hacer
algo así:

… Y si comprobamos el resultado, obtendremos algo como esto:


En realidad, podríamos haber simplificado un poco escribiendo algo así:

Tablas Hash
Las tablas Hash son estructuras de datos que almacenan parejas de claves y valores. También se
conocen como diccionarios.

De algún modo, podríamos pensar que se trata de arrays donde, en lugar de identificar los
diferentes elementos por su posición, utilizan valores que actúan como índices. Su mayor ventaja es
que las claves y los valores pueden ser de cualquier tipo y longitud.

Su sintaxis es parecida a la de los arrays, pero cambiando los paréntesis por llaves y las comas por
puntos y comas:

Veamos el array del ejemplo de arriba reinterpretado como tabla Hash:

Igual que hicimos con los arrays, aprovechamos que PowerShell no tiene en cuenta los saltos de
línea ni el exceso espacios, para conseguir que nuestro código más legible añadiéndolos según
nuestro criterio.

Incluso podemos crear una tabla Hash vacía e ir añadiendo elementos más tarde:

Mostrar el contenido de una tabla Hash

A diferencia de lo que ocurría con los arrays, para que Write-Host consiga mostrar el contenido de
una tabla Hash, deberemos canalizar su contenido a través del cmdlet Out-String. Éste convierte la
información ofrecida por los objetos de PowerShell en arrays.

Por lo tanto, la sintaxis que usaremos será similar a esta:

El resultado será como el que ilustra la imagen siguiente:


También podemos consultar sólo sus claves utilizando la propiedad Keys:

… o sólo los valores, usando la propiedad Values:

Utilizar un elemento individual de la tabla Hash


Para acceder a un elemento concreto de la tabla Hash, basta con escribir su nombre seguido de la
clave que necesitamos encerrada entre corchetes. Por ejemplo, para mostrar el primer elemento de
la tabla Hash anterior, escribiríamos esto:

Como cabe esperar, el resultado obtenido es como en la siguiente imagen:


También podemos utilizar notación orientada a objetos:

Como puedes ver en la imagen siguiente, el resultado que obtenemos es completamente


equivalente al de la notación convencional:

Incluso podemos prescindir de las comillas cuando la clave consiste en una sola palabra. Por
ejemplo, si tuviésemos la siguiente tabla Hash…

Lógicamente, el resultado que obtenemos será el valor almacenado en la clave Rojo:


Y si lo que queremos es utilizar el elemento dentro de una expresión, nos limitamos a utilizar la
notación anterior como si se tratara de una variable simple. Por ejemplo, para incrementar en uno el
valor del elemento, haríamos esto:

o incluso esto:

Tabla Hash como objetos


Como en el caso de los arrays, en las tablas Hash, disponemos de herramientas que nos facilitan su
creación, manipulación, búsqueda y ordenación.

Por ejemplo, para obtener el número de pares contenidos en una tabla Hash escribiríamos algo así:

Para conocer en detalle todas las características de la clase Hashtable, puedes recurrir al siguiente
enlace: [Link]

Recorrer una tabla Hash


Muchas veces necesitamos realizar operaciones que afecten a todos los elementos de la tabla Hash.
Para estas situaciones podemos utilizar la estructura repetitiva foreach. Por ejemplo, imagina que
quieres obtener el precio de los artículos anteriores, después de añadirles un impuesto. El script
podría ser parecido a este:
Y ofrecería el siguiente resultado:

Añadir y quitar elementos en una tabla Hash


Cuando necesitamos que una tabla Hash crezca con nuevos elementos, basta con escribir su nombre
seguido de la nueva clave encerrada entre corchetes:

También puedes utilizar sintaxis orientado a objetos:

O, incluso…

Y para eliminar uno de los elementos, bastaría con escribir:


Por último, si necesitamos eliminar la tabla completa, podríamos utilizar su método Clear:

También podría gustarte