Compartilhar via


10 Tabelas de hash

Nota editorial

Importante

A Especificação da Linguagem do Windows PowerShell 3.0 foi publicada em dezembro de 2012 e é baseada no Windows PowerShell 3.0. Essa especificação não reflete o estado atual do PowerShell. Não há nenhum plano para atualizar essa documentação para refletir o estado atual. Esta documentação é apresentada aqui para referência histórica.

O documento de especificação está disponível como um documento do Microsoft Word do Centro de Download da Microsoft em: https://www.microsoft.com/download/details.aspx?id=36389 esse documento do Word foi convertido para apresentação aqui no Microsoft Learn. Durante a conversão, algumas alterações editoriais foram feitas para acomodar a formatação para a plataforma Docs. Alguns erros de digitação e pequenos foram corrigidos.

Sintaxe:

Dica

A notação ~opt~ nas definições de sintaxe indica que a entidade lexical é opcional na sintaxe.

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

Introdução 10.1

O tipo Hashtable representa uma coleção de objetos de par chave/valor que dá suporte à recuperação eficiente de um valor quando indexado pela chave. Cada par chave/valor é um elemento , que é armazenado em algum tipo de objeto definido pela implementação.

A chave de um elemento não pode ser o valor nulo. Não há restrições sobre o tipo de chave ou valor. Não há suporte para chaves duplicadas.

Considerando um objeto de par chave/valor, a chave e o valor associado podem ser obtidos usando as propriedades de instância Chave e Valor, respectivamente.

Considerando uma ou mais chaves, os valores correspondentes podem ser acessados por meio do operador de índice Hashtable [] (seção 7.1.4.3).

Todos os Hashtables são do tipo Hashtable (§4.3.3).

A ordem das chaves na coleção retornada por Keys não é especificada; no entanto, é a mesma ordem que os valores associados na coleção retornada por Valores.

Aqui estão alguns exemplos envolvendo Hashtables:

$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

Os elementos Hashtable são armazenados em um objeto do tipo DictionaryEntry e as coleções retornadas por Keys e Values têm o tipo ICollection.

10.2 Criação de Tabela Hash

Uma Hashtable é criada por meio de um literal de hash (seção 7.1.9) ou do cmdlet New-Object. Ele pode ser criado com zero ou mais elementos. A propriedade Count retorna a contagem de elementos atual.

10.3 Adicionar e remover elementos em Hashtable

Um elemento pode ser adicionado a uma Hashtable atribuindo (seção 7.11.1) um valor a um nome de chave não existente ou a um índice (seção 7.1.4.3) que usa um nome de chave não existente. A remoção de um elemento requer o uso do método Remove. Por exemplo

$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 Concatenação de Tabela de hash

As Tabelas de hash podem ser concatenadas por meio dos operadores + e +=, que resultam na criação de uma nova Hashtable. Os Hashtables existentes não são alterados. Consulte do §7.7.4 para obter mais informações.

10.5 Hashtables como tipos de referência

Como Hashtable é um tipo de referência, a atribuição de um Hashtable envolve uma cópia superficial; ou seja, a variável atribuída refere-se ao mesmo Hashtable; nenhuma cópia do Hashtable é feita. Por exemplo

$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 Enumerando em uma Tabela de hash

Para processar cada par em uma Hashtable, use a propriedade Keys para recuperar a lista de chaves como uma matriz e, em seguida, enumerar sobre os elementos dessa matriz, recebendo o valor associado por meio da propriedade Value ou de um índice, dessa forma

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