Capítulo 7: Variables que guardan múltiples valores

Publicado por P. Ruiz en

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:

Scripts-en-PowerShell-Guia-para-principiantes-158

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

Scripts-en-PowerShell-Guia-para-principiantes-244

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:

Scripts-en-PowerShell-Guia-para-principiantes-245

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:

Scripts-en-PowerShell-Guia-para-principiantes-246

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

Scripts-en-PowerShell-Guia-para-principiantes-247

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

Scripts-en-PowerShell-Guia-para-principiantes-248

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

Scripts-en-PowerShell-Guia-para-principiantes-249

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:

Scripts-en-PowerShell-Guia-para-principiantes-250

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

Scripts-en-PowerShell-Guia-para-principiantes-251

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

Scripts-en-PowerShell-Guia-para-principiantes-252

Como puedes ver en la imagen siguiente, el resultado que obtenemos es completamente equivalente al de la notación convencional:

Scripts-en-PowerShell-Guia-para-principiantes-253

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

Scripts-en-PowerShell-Guia-para-principiantes-254

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

Scripts-en-PowerShell-Guia-para-principiantes-255

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:

Scripts-en-PowerShell-Guia-para-principiantes-256

o incluso esto:

Scripts-en-PowerShell-Guia-para-principiantes-257

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í:

Scripts-en-PowerShell-Guia-para-principiantes-258

Para conocer en detalle todas las características de la clase Hashtable, puedes recurrir al siguiente enlace: https://msdn.microsoft.com/es-es/library/system.collections.hashtable(v=vs.110).aspx.

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 obtener el precio de los artículos anteriores, después de añadirles un impuesto. El script podría ser parecido a este:

Scripts-en-PowerShell-Guia-para-principiantes-259

Y ofrecería el siguiente resultado:

Scripts-en-PowerShell-Guia-para-principiantes-260

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:

Scripts-en-PowerShell-Guia-para-principiantes-261

También puedes utilizar sintaxis orientado a objetos:

Scripts-en-PowerShell-Guia-para-principiantes-262

O, incluso…

Scripts-en-PowerShell-Guia-para-principiantes-263

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

Scripts-en-PowerShell-Guia-para-principiantes-264

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

Scripts-en-PowerShell-Guia-para-principiantes-265