Condividi tramite


Le tabelle hash

Nota editoriale

Importante

La specifica linguistica di Windows PowerShell 3.0 è stata pubblicata nel dicembre 2012 ed è basata su Windows PowerShell 3.0. Questa specifica non riflette lo stato corrente di PowerShell. Non è previsto l'aggiornamento di questa documentazione per riflettere lo stato corrente. Questa documentazione è presentata qui per riferimento cronologico.

Il documento di specifica è disponibile come documento Microsoft Word dall'Area download Microsoft all'indirizzo: https://www.microsoft.com/download/details.aspx?id=36389. Quel documento Microsoft Word è stato convertito per la visualizzazione qui su Microsoft Learn. Durante la conversione sono state apportate alcune modifiche editoriali per supportare la formattazione per la piattaforma Docs. Sono stati corretti alcuni errori di digitazioni e errori secondari.

Sintassi:

Consiglio

La notazione ~opt~ nelle definizioni della sintassi indica che l'entità lessicale è facoltativa nella sintassi.

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 Introduzione

Il tipo Hashtable rappresenta una raccolta di coppia chiave/valore oggetti che supportano il recupero efficiente di un valore quando indicizzato dalla chiave. Ogni coppia chiave/valore è un elemento , archiviato in un tipo di oggetto definito dall'implementazione.

La chiave di un elemento non può essere il valore Null. Non esistono restrizioni sul tipo di chiave o valore. Le chiavi duplicate non sono supportate.

Dato un oggetto coppia chiave/valore, è possibile ottenere la chiave e il valore associato usando rispettivamente le proprietà dell'istanza Key e Value.

Data una o più chiavi, è possibile accedere ai valori corrispondenti tramite l'operatore di indicizzazione hashtable [] (§7.1.4.3).

Tutte le hashtable sono di tipo Hashtable (§4.3.3).

L'ordine delle chiavi nella raccolta restituita da Keys non è specificato; Tuttavia, è lo stesso ordine dei valori associati nella raccolta restituita da Values.

Di seguito sono riportati alcuni esempi relativi alle tabelle Hashtable:

$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

Hashtable elementi vengono archiviati in un oggetto di tipo DictionaryEntrye le raccolte restituite da Keys and Values hanno tipo ICollection.

10.2 Creazione della tabella hash

Un Hashtable viene creato tramite un letterale hash (§7.1.9) o il cmdlet New-Object. Può essere creato con zero o più elementi. La proprietà Count restituisce il numero attuale di elementi.

10.3 Aggiunta e rimozione di elementi hashtable

Un elemento può essere aggiunto a un Hashtable assegnando (§7.11.1) un valore a un nome di chiave inesistente o a un indice (§7.1.4.3) che usa un nome di chiave inesistente. La rimozione di un elemento richiede l'uso del metodo Remove. Per esempio

$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 Concatenazione hashtable

Le tabelle hash possono essere concatenate tramite gli operatori + e +=, che comportano entrambi la creazione di un nuovo Hashtable. Le tabelle Hash esistenti sono invariate. Per altre informazioni, vedere §7.7.4.

10.5 Tabelle hash come tipi di riferimento

Poiché Hashtable è un tipo riferimento, l'assegnazione di un Hashtable comporta una copia superficiale; ovvero, la variabile assegnata a fa riferimento allo stesso Hashtable; non viene creata alcuna copia del Hashtable. Per esempio

$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 Enumerazione su una tabella hash

Per elaborare ogni coppia in un Hashtable, utilizzare la proprietà chiavi per recuperare l'elenco di chiavi come matrice, per poi enumerare gli elementi di tale matrice per ottenere il valore associato tramite la proprietà Value o un indice, come indicato di seguito.

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