10. Hashtabels

Syntaxis:

Tip

De ~opt~ notatie in de syntaxisdefinities geeft aan dat de lexicale entiteit optioneel is in de syntaxis.

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 Inleiding

Het type Hashtable vertegenwoordigt een verzameling sleutel-waardepaarobjecten die het efficiënt ophalen van een waarde ondersteunen wanneer deze door de sleutel wordt geïndexeerd. Elk sleutel-waardepaar is een element dat is opgeslagen in een bepaald implementatie-gedefinieerd objecttype.

De sleutel van een element mag niet de null-waarde zijn. Er zijn geen beperkingen voor het type sleutel of waarde. Dubbele sleutels worden niet ondersteund.

Op basis van een sleutel-waardepaarobject kunnen de sleutel en de bijbehorende waarde respectievelijk worden verkregen met behulp van de exemplaareigenschappen Sleutel en Waarde.

Bij een of meer sleutels zijn de bijbehorende waarden toegankelijk via de operator voor hashtabelsubscripts [] (7.1.4.3).

Alle hashtabels hebben het type Hashtable (4.3.3).

De volgorde van de sleutels in de verzameling die wordt geretourneerd door Sleutels is niet gespecificeerd; Het is echter dezelfde volgorde als de gekoppelde waarden in de verzameling die wordt geretourneerd door Waarden.

Hier zijn enkele voorbeelden met betrekking tot 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

Hashtable -elementen worden opgeslagen in een object van het type DictionaryEntry en de verzamelingen die worden geretourneerd door Sleutels en waarden hebben het type ICollection.

10.2 Hashtabel maken

Een Hashtable wordt gemaakt via een hash-letterlijke (7.1.9) of de cmdlet New-Object . Deze kan worden gemaakt met nul of meer elementen. De eigenschap Count retourneert het huidige aantal elementen.

10.3 Hashtable-elementen toevoegen en verwijderen

Een element kan worden toegevoegd aan een Hashtable door (7.11.1) een waarde toe te wijzen aan een niet-bestaande sleutelnaam of aan een subscript (7.1.4.3) dat gebruikmaakt van een niet-bestaande sleutelnaam. Voor het verwijderen van een element is het gebruik van de methode Remove vereist. Bijvoorbeeld:

$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 Hashtable-samenvoeging

Hashtabels kunnen worden samenvoegd via de + operators en += , die beide resulteren in het maken van een nieuwe Hashtable. De bestaande hashtabels zijn ongewijzigd. Zie voor meer informatie .7.7.4 .

10.5 Hashtables als verwijzingstypen

Zoals Hashtable een verwijzingstype is, Hashtable omvat de toewijzing van een een niet-vaste kopie. Dat wil zeggen dat Hashtablede variabele die is toegewezen aan verwijst naar dezelfde ; Hashtable er wordt geen kopie van gemaakt. Bijvoorbeeld:

$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 Een hashtabel opsnoemen

Als u elk paar in Hashtableeen wilt verwerken, gebruikt u de eigenschap Sleutels om de lijst met sleutels op te halen als een matrix en vervolgens als volgt een opsomming te maken van de elementen van die matrix om de bijbehorende waarde op te halen via de eigenschap Value of een subscript.

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