Partager via


10. Tables de hachage

Note éditoriale

Important

La spécification du langage Windows PowerShell 3.0 a été publiée en décembre 2012 et est basée sur Windows PowerShell 3.0. Cette spécification ne reflète pas l’état actuel de PowerShell. Il n’existe aucun plan de mise à jour de cette documentation pour refléter l’état actuel. Cette documentation est présentée ici pour référence historique.

Le document de spécification est disponible en tant que document Microsoft Word à partir du Centre de téléchargement Microsoft à l’adresse : https://www.microsoft.com/download/details.aspx?id=36389 ce document Word a été converti pour présentation ici sur Microsoft Learn. Pendant la conversion, certaines modifications éditoriales ont été apportées pour prendre en charge la mise en forme de la plateforme Docs. Certaines fautes de frappe et erreurs mineures ont été corrigées.

Syntaxe:

Conseil

La notation ~opt~ dans les définitions de syntaxe indique que l’entité lexicale est facultative dans la syntaxe.

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 Introduction

Le type Hashtable représente une collection d'objets de paire clé/valeur qui permet une récupération efficace d’une valeur lorsque celle-ci est indexée par la clé. Chaque paire clé/valeur est un élément , qui est stocké dans un type d’objet défini par l’implémentation.

La clé d’un élément ne peut pas être la valeur Null. Il n’existe aucune restriction sur le type d’une clé ou d’une valeur. Les clés en double ne sont pas prises en charge.

En fonction d’un objet de paire clé/valeur, la clé et la valeur associée peuvent être obtenues à l’aide des propriétés d’instance Clé et Valeur, respectivement.

À partir d’une ou de plusieurs clés, la ou les valeurs correspondantes sont accessibles via l’opérateur d’indice Hashtable [] (§7.1.4.3).

Toutes les tables de hachage sont de type Hashtable (§4.3.3).

L’ordre des clés de la collection retournée par Keys n’est pas spécifié ; Toutefois, il s’agit du même ordre que les valeurs associées dans la collection retournée par Values.

Voici quelques exemples qui impliquent des tables de hachage :

$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 éléments sont stockés dans un objet de type DictionaryEntry, et les collections retournées par Keys et Values ont le type ICollection.

10.2 Création d’un élément Hashtable

Un élément Hashtable (table de hachage) est créé à l’aide d’un littéral de hachage (§7.1.9) ou de l’applet de commande New-Object. Il peut être créé avec zéro ou plusieurs éléments. La propriété Count renvoie le nombre d’éléments actuel.

10.3 Ajout et suppression d’éléments de Table de Hachage

Un élément peut être ajouté à un Hashtable en affectant (§7.11.1) une valeur à un nom de clé inexistant ou à un indice (§7.1.4.3) qui utilise un nom de clé inexistant. La suppression d’un élément nécessite l’utilisation de la méthode Remove. Par exemple

$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 Concaténation de tables de hachage

Les tables de hachage peuvent être concaténées via les opérateurs + et +=, ce qui entraîne la création d’un nouveau Hashtable. Les tables de hachage existantes sont inchangées. Pour plus d’informations, consultez §7.7.4.

10.5 Tables de hachage en tant que types référence

Comme Hashtable est un type de référence, l’affectation d’un Hashtable implique une copie superficielle ; autrement dit, la variable affectée fait référence au même Hashtable; aucune copie de la Hashtable n’est effectuée. Par exemple

$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 Énumération sur une Hashtable

Pour traiter chaque paire d’un Hashtable, utilisez la propriété Keys pour récupérer la liste des clés sous forme de tableau, puis énumérez les éléments de ce tableau pour obtenir la valeur associée via la propriété Value ou un indice, comme suit :

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