10. Hashtabeller

Syntax:

Tips

Notationen ~opt~ i syntaxdefinitionerna anger att den lexikala entiteten är valfri i syntaxen.

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 Introduktion

Typen Hashtable representerar en samling nyckel /värde-parobjekt som stöder effektiv hämtning av ett värde när det indexeras av nyckeln. Varje nyckel/värde-par är ett element som lagras i någon implementeringsdefinierad objekttyp.

Ett elements nyckel får inte vara null-värdet. Det finns inga begränsningar för typen av nyckel eller värde. Dubblettnycklar stöds inte.

Med ett nyckel/värde-parobjekt kan nyckeln och det associerade värdet hämtas med hjälp av instansegenskaperna Nyckel respektive Värde.

Med en eller flera nycklar kan motsvarande värde(er) nås via hashtable-subscript-operatorn [] (·7.1.4.3).

Alla hashtabeller har typen Hashtable (#4.3.3).

Ordningen på nycklarna i samlingen som returneras av Nycklar är ospecificerad. Det är dock samma ordning som de associerade värdena i samlingen som returneras av Values.

Här följer några exempel som rör hashtabeller:

$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 -element lagras i ett objekt av typen DictionaryEntry, och samlingarna som returneras av Nycklar och Värden har typen ICollection.

10.2 Skapa hash-tabell

En Hashtable skapas via en hash-literal (7.1.9) eller cmdleten New-Object . Den kan skapas med noll eller flera element. Egenskapen Count returnerar det aktuella elementantalet.

10.3 Lägga till och ta bort hash-tabellelement

Ett element Hashtable kan läggas till i ett genom att tilldela (7.11.1) ett värde till ett nyckelnamn som inte finns eller till ett uppsänkt namn (7.1.4.3) som använder ett namn som inte finns. Borttagning av ett element kräver att metoden Remove används. Exempel:

$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 Sammanfogning av hash-tabell

Hashtabeller kan sammanfogas via operatorerna + och += , som båda resulterar i skapandet av en ny Hashtable. De befintliga hash-tabellerna är oförändrade. Mer information finns i 7.7.4 .

10.5 Hashtabeller som referenstyper

Liksom Hashtable en referenstyp Hashtable omfattar tilldelningen av en en grundkopia, det vill säga att variabeln som tilldelats Hashtablerefererar till refererar till samma . Ingen kopia av Hashtable görs. Exempel:

$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 Räkna upp över en hash-tabell

Om du Hashtablevill bearbeta varje par i en använder du egenskapen Nycklar för att hämta listan med nycklar som en matris och sedan räkna upp de element i matrisen som hämtar det associerade värdet via egenskapen Value eller ett nedsänkt objekt enligt följande

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