Sdílet prostřednictvím


10. Hashtables

Redakční poznámka

Důležitý

specifikace jazyka Windows PowerShell 3.0 byla publikována v prosinci 2012 a je založená na prostředí Windows PowerShell 3.0. Tato specifikace neodráží aktuální stav PowerShellu. Tato dokumentace se neplánuje aktualizovat tak, aby odrážela aktuální stav. Tato dokumentace je zde uvedena pro historické reference.

Dokument specifikace je k dispozici jako dokument aplikace Microsoft Word z webu Microsoft Download Center na adrese: https://www.microsoft.com/download/details.aspx?id=36389 Dokument aplikace Word byl převeden pro prezentaci zde na webu Microsoft Learn. Během převodu byly provedeny některé redakční změny tak, aby vyhovovaly formátování pro platformu Docs. Některé překlepy a menší chyby byly opraveny.

Syntax:

Spropitné

Zápis ~opt~ v definicích syntaxe označuje, že lexikální entita je v syntaxi nepovinná.

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 Úvod

Typ Hashtable představuje kolekci párů klíč/hodnota objektů, které podporují efektivní vyhledávání hodnoty při indexování klíčem. Každý pár klíč/hodnota je prvek, který je uložen v objektu určitého typu stanoveného implementací.

Klíč elementu nemůže mít hodnotu null. Typ klíče nebo hodnoty nemá žádná omezení. Duplicitní klíče nejsou podporovány.

Vzhledem k objektu páru klíč/hodnota lze klíč a přidruženou hodnotu získat pomocí vlastností instance Klíč a Hodnota.

Pomocí jednoho nebo více klíčů lze k odpovídajícím hodnotám přistupovat prostřednictvím hašovacího operátoru [] (§7.1.4.3).

Všechny hashovací tabulky mají typ Hashtable (§4.3.3).

Pořadí klíčů v kolekci vrácené klíči není zadané; jedná se však o stejné pořadí jako přidružené hodnoty v kolekci vrácené hodnotami.

Tady je několik příkladů zahrnujících hashovací tabulky:

$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 prvky jsou uloženy v objektu typu DictionaryEntrya kolekce vrácené klíči a hodnoty mají typ ICollection.

Vytvoření hashovací tabulky 10.2

Hashtable se vytvoří pomocí hashového literálu (§7.1.9) nebo rutiny New-Object. Dá se vytvořit s nulovými nebo více prvky. Vlastnost Count vrátí aktuální počet prvků.

10.3 Přidání a odebrání prvků hashtable

Prvek lze přidat do Hashtable přiřazením hodnoty (§7.11.1) neexistujícímu názvu klíče nebo indexu (§7.1.4.3), který používá neexistující název klíče. Odebrání prvku vyžaduje použití Metody Remove. Například

$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 Zřetězení hashovací tabulky

Hashtables lze zřetězit prostřednictvím operátorů + a +=, z nichž oba vedou k vytvoření nového Hashtable. Existující hashovací tabulky se nemění. Další informace najdete v §7.7.4.

10.5 Hašovací tabulky jako referenční typy

Vzhledem k tomu, že Hashtable je referenční typ, přiřazení Hashtable zahrnuje mělkou kopii; to znamená, že přiřazená proměnná odkazuje na stejnou Hashtable; žádná kopie Hashtable není vytvořena. Například

$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 Iterace nad hashovací tabulkou

Ke zpracování každého páru v Hashtablepoužijte vlastnost Klíče, abyste získali seznam klíčů jako pole, a poté procházejte prvky pole, abyste získali přidruženou hodnotu prostřednictvím vlastnosti Value nebo indexu, následujícím způsobem:

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