¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. PowerShell Core y Windows PowerShell
  3. Arrays
Extrait - PowerShell Core y Windows PowerShell Los fundamentos del lenguaje (2a edición)
Extractos del libro
PowerShell Core y Windows PowerShell Los fundamentos del lenguaje (2a edición) Volver a la página de compra del libro

Arrays

Introducción

La manipulación de arrays en PowerShell es una noción esencial que debe dominar. Aparte del hecho de que su uso es bastante cómodo, conviene saber que, cuando el resultado de un comando devuelve varios objetos, PowerShell devuelve un array de objetos. Veremos en este capítulo que existen diferentes tipos de arrays y que estos son capaces de contener elementos de distintos tipos si es necesario.

Arrays de una dimensión

El array de una dimensión es el caso más simple. Los valores se almacenan unos a continuación de los otros, y basta con indicar un número de índice (o index) para acceder al contenido. Un array de una dimensión se denomina también lista o colección.

images/5-2.png

Por ejemplo aquí:

El valor 18 se encuentra en el array con el índice 0.

El valor 22 se encuentra en el array con el índice 1.

Los índices del array comienzan en 0 y no en 1 como en otros lenguajes.

1. Inicializar un array vacío

Existen muchas maneras de proceder para declarar un array, pero su expresión más sencilla, la declaración de un array vacío, puede hacerse de la siguiente manera:

$miArray = @() 

La variable $miArray es ahora un array vacío no tipado. Es decir que podrá contener todo tipo de objetos.

Restringir el tipo de array

Es posible restringir el tipo de datos que podrá contener un array. Par ello, basta con especificar el tipo entre corchetes delante del nombre del array cuando lo definamos.

Por ejemplo:

[Int[]]$miArray = @() 
[String[]]$miArray2 = @() 
[Double[]]$miArray3 = @() 

Preste atención de no olvidar la pareja de corchetes vacíos después del tipo, como Int[]. Si no lo hace, PowerShell devolverá un error indicando que no puede convertir un array en un valor entero. En efecto un tipo [Int] simple (sin el par de corchetes vacíos como sufijo) indica un objeto de tipo entero y no un array de enteros.

¡Buena práctica!

Una buena práctica cuando conocemos de antemano (lo que generalmente ocurre) el tipo de datos que debe contener un array es restringir sistemáticamente los arrays, pero también las variables. De esta manera, cualquier error se detectará rápidamente evitándonos así largas sesiones de depuración.

Ejemplo: Tentativa de asignación de un valor no admitido en un array restringido

PS > $miArray1[0] = 'Hola' 
 
Cannot convert value "Hola" to type "System.Int32". Error: "Input 
string...

Arrays de varias dimensiones

Cuando hablamos de arrays de varias dimensiones, lo hacemos de arrays con varios índices, es más con tantos índices como dimensiones. Así, para pasar de un array de una dimensión a dos dimensiones, basta con añadir un índice que permita hacer referencia a él para esta nueva dimensión.

images/5-3.png

La lectura de arrays de varias dimensiones es similar a los de una dimensión. La única dificultad es jugar con los índices. Tomemos el caso del array descrito más arriba.

La lectura del array con el índice 0 devolverá el primer elemento del array (aquí, otro array):

PS > $tab[0] 
1 
2 
3 

Para obtener un valor determinado, deberemos simplemente fijar el índice de la dimensión horizontal y el de la dimensión vertical.

PS > $tab[0][2] 
3 

La mayoría de veces, un array con varias dimensiones es un array de arrays. Dicho de otro modo, se trata de un array que contiene otros arrays. Es lo que vamos a comprobar en el ejemplo siguiente.

Definimos el siguiente array:

PS > $tabu = @(10..13),@('Hola','Adios'),@(1.2,0.3,2.33) 

Hemos definido un array que contiene otros tres arrays; respectivamente un array de enteros que va desde los valores 10 a 13, un array de cadenas de caracteres y un array de números decimales (double).

Recuerde que para conocer el tipo de un objeto, puede usar el método...

Arrays asociativos

1. Arrays asociativos estándares

Un array asociativo, también llamado tabla de hash, es una tabla en la cual cada valor se referencia por una clave y no por un índice. Hasta aquí hemos visto que en un array cada valor se indexaba numéricamente. No obstante, en una tabla de hash, esta noción de indexación numérica ya no existe. Utilizamos claves como identificadores. Por ejemplo, veamos una tabla de hash en la que cada elemento (clave) posee un valor siendo en este caso la representación de un precio.

Clave

Valor

Proyector

1600

Television

1400

Consola_de_juegos

400

Con las tablas de hash, igual que con los arrays clásicos, puede utilizar tipos de datos heterogéneos.

a. Declarar un array asociativo vacío

La declaración de un array asociativo vacío se realiza de la siguiente manera:

$hashtable = @{} 

b. Inicializar un array asociativo con datos

Para inicializar un array asociativo que contenga valores, se utiliza la sintaxis siguiente:

$hashtable = @{<clave1 = valor>; <clave2 = valor>;...} 

Tenga en cuenta que la creación de un array asociativo necesita anteponer el símbolo @ delante de la llave de apertura {, separar todas las parejas clave/valor por un punto y coma y cerrar el conjunto con una llave }.

Volvamos a nuestro ejemplo con los productos anteriormente descritos. Así debería ser la inicialización...