Compartir a través de


10 Tablas hash

Nota editorial

Importante

La Especificación del lenguaje de Windows PowerShell 3.0 se publicó en diciembre de 2012 y se basa en Windows PowerShell 3.0. Esta especificación no refleja el estado actual de PowerShell. No hay ningún plan para actualizar esta documentación para reflejar el estado actual. Esta documentación se presenta aquí para obtener referencia histórica.

El documento de especificación está disponible como un documento de Microsoft Word del Centro de descarga de Microsoft en: https://www.microsoft.com/download/details.aspx?id=36389 Ese documento de Word se ha convertido para su presentación aquí en Microsoft Learn. Durante la conversión, se han realizado algunos cambios editoriales para dar cabida al formato de la plataforma Docs. Se han corregido algunos errores tipográficos y menores.

Sintaxis:

Sugerencia

La notación ~opt~ en las definiciones de sintaxis indica que la entidad léxica es opcional en la sintaxis.

hash-literal-expression:
    @{ new-lines~opt~ hash-literal-body~opt~ new-lines~opt~ }

hash-literal-body:
    hash-entry
    hash-literal-body statement-terminators hash-entry

hash-entry:
    key-expression = new-lines~opt~ statement

key-expression:
    simple-name
    unary-expression

statement-terminator:
    ;
    new-line-character

10.1 Introducción

El tipo Hashtable representa una colección de objetos pares clave/valor que admiten la recuperación eficaz de un valor cuando se indexa por la clave. Cada par clave-valor es un elemento , que se almacena en algún tipo de objeto definido por la implementación.

La clave de un elemento no puede ser el valor NULL. No hay restricciones en el tipo de clave o valor. No se admiten claves duplicadas.

Dado un objeto de par clave-valor, la clave y el valor asociado se pueden obtener mediante las propiedades de instancia Key y Value, respectivamente.

Dada una o varias claves, se puede acceder a los valores correspondientes a través del operador de subíndice Hashtable [] (§7.1.4.3).

Todas las tablas hash son de tipo Hashtable (§4.3.3).

El orden de las claves de la colección devuelta por Keys no se especifica; sin embargo, es el mismo orden que los valores asociados de la colección devueltas por Values.

Estos son algunos ejemplos que implican tablas hash:

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1.FirstName # designates the key FirstName
$h1["LastName"] # designates the associated value for key LastName
$h1.Keys # gets the collection of keys

los elementos Hashtable se almacenan en un objeto de tipo DictionaryEntryy las colecciones devueltas por Keys y Values tienen tipo ICollection.

Creación de tabla hash 10.2

Un elemento Hashtable se crea mediante un literal hash (sección 7.1.9) o el cmdlet New-Object. Se puede crear con cero o más elementos. La propiedad Count devuelve el número actual de elementos.

10.3 Adición y eliminación de elementos Hashtable

Un elemento se puede agregar a un Hashtable asignando (§7.11.1) un valor a un nombre de clave no existente o a un subíndice (§7.1.4.3) que usa un nombre de clave no existente. La eliminación de un elemento requiere el uso del método Remove. Por ejemplo

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1.Dept = "Finance" # adds element Finance
$h1["Salaried"] = $false # adds element Salaried
$h1.Remove("Salaried") # removes element Salaried

10.4 Concatenación de tabla hash

Las tablas hash se pueden concatenar a través de los operadores + y +=, que dan lugar a la creación de un nuevo Hashtable. Las tablas hash existentes no se modifican. Consulte §7.7.4 para obtener más información.

10.5 Tablas hash como tipos de referencia

Como Hashtable es un tipo de referencia, la asignación de un Hashtable implica una copia superficial; es decir, la variable asignada a hace referencia al mismo Hashtable; no se realiza ninguna copia del Hashtable. Por ejemplo

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h2 = $h1
$h1.FirstName = "John" # change key's value in $h1
$h2.FirstName # change is reflected in $h2

10.6 Enumeración sobre una tabla hash

Para procesar cada par de un elemento Hashtable, use la propiedad Keys para recuperar la lista de claves como una matriz y, después, enumere en los elementos de esa matriz obteniendo el valor asociado mediante la propiedad Value o un subíndice, como se muestra a continuación.

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123}
foreach ($e in $h1.Keys) {
   "Key is " + $e + ", Value is " + $h1[$e]
}