HOWTO · PowerShell

Comment créer un tableau, une table de hachage et un dictionnaire dans PowerShell

Apprenez à créer et à utiliser des tableaux, des tables de hachage et des dictionnaires ordonnés dans PowerShell grâce à ce guide complet. Comprenez les différences clés, comment accéder aux éléments, les ajouter et les supprimer, et quand utiliser chaque structure de données. Comprend des exemples pratiques, des cas d'utilisation réels et une section FAQ pour vous aider à maîtriser efficacement les scripts PowerShell et la manipulation de données. Parfait pour les débutants et les utilisateurs avancés qui cherchent à améliorer l'automatisation et l'organisation des données dans PowerShell.

Sur cette page

Choisissez un tableau (@()) pour une séquence de valeurs, une table de hachage (@{}) pour la recherche par clé-valeur, et un dictionnaire ordonné ([ordered]@{}) lorsque l’ordre dans lequel les clés ont été ajoutées doit être conservé. Les exemples ci-dessous sont des extraits PowerShell autonomes. Aucune observation d’exécution n’est disponible pour ces exemples, donc aucune sortie n’est affirmée.

Créer des tableaux dans PowerShell

Un tableau stocke plusieurs valeurs dans une variable. Les index des tableaux PowerShell commencent à zéro, et -1 fait référence au dernier élément. @() collecte explicitement les résultats sous forme de tableau, y compris lorsqu’une commande renvoie une seule valeur. Exécutez cet exemple :

$items = @('apple', 'banana', 'cherry')
$items[0]
$items[-1]
$items += 'date'
$items = @($items | Where-Object { $_ -ne 'banana' })
$items -join ', '

L’exemple lit la première et la dernière valeur, ajoute une valeur, puis attribue un tableau filtré qui exclut banana. Les tableaux PowerShell ont une taille fixe ; += crée un tableau résultant et le réattribue, donc l’ajout répété à un grand tableau peut nécessiter des copies répétées. Pour des ajouts et des suppressions fréquents, une collection mutable telle que System.Collections.Generic.List[object] peut être plus adaptée. Pour inspecter le type d’un tableau, utilisez $items.GetType().FullName ; @() produit un Object[] pour ces valeurs de chaîne.

Travailler avec les tables de hachage dans PowerShell

Une table de hachage PowerShell associe des clés à des valeurs. Créez-en une avec @{}, lisez une entrée avec la notation par crochets, attribuez une clé pour ajouter ou remplacer une entrée, et appelez .Remove() pour en supprimer une. Les crochets fonctionnent de manière fiable pour des noms de clés arbitraires ; la notation par point est pratique lorsqu’une clé est un nom simple de type propriété, mais peut entrer en conflit avec des membres intégrés comme Count.

$inventory = @{ Fruit = 'Apple'; Color = 'Red'; Count = 5 }
$inventory['Color']
$inventory['Shape'] = 'Round'
$inventory.Remove('Color')
$inventory.GetEnumerator() | Sort-Object Name | ForEach-Object {
    "{0}={1}" -f $_.Name, $_.Value
}

Le dernier pipeline trie les entrées émises par clé pour l’affichage. Il ne réordonne ni ne remplace la table de hachage d’origine. Les clés des tables de hachage PowerShell sont insensibles à la casse par défaut ; utilisez une autre collection lorsque la sémantique de comparaison des clés doit différer.

Créer des dictionnaires ordonnés dans PowerShell

Le littéral [ordered] crée un dictionnaire ordonné et conserve l’ordre dans lequel les entrées ont été insérées. Accédez aux entrées et mettez-les à jour avec des clés exactement comme dans une table de hachage. L’ordre d’insertion est distinct du tri alphabétique : l’ordre d’origine reste la séquence d’insertion, à moins que vous ne triiez explicitement un résultat séparé.

$settings = [ordered]@{ Name = 'Delft'; Region = 'South Holland'; Active = $true }
$settings['Region']
$settings['Timezone'] = 'Europe/Amsterdam'
$settings.GetEnumerator() | ForEach-Object {
    "{0}={1}" -f $_.Key, $_.Value
}

Table de hachage et dictionnaire ordonné : différences clés

| Caractéristique | Table de hachage | Dictionnaire ordonné |
| Littéral PowerShell | @{} | [ordered]@{} |
| Modèle de données | Les clés correspondent à des valeurs | Les clés correspondent à des valeurs |
| Ordre d’itération | Ne vous fiez pas à l’ordre d’insertion | Conserve l’ordre d’insertion |
| Lire ou mettre à jour une entrée | $table['key'] | $dictionary['key'] |
| Le mieux adapté pour | La recherche par clé lorsque l’ordre d’affichage n’a pas d’importance | Les données clé-valeur dont l’ordre d’insertion compte |

Une table de hachage PowerShell n’est pas la même chose que n’importe quel type de dictionnaire .NET. System.Collections.Hashtable est un type .NET utilisé par le littéral @{} de PowerShell, tandis que .NET fournit également d’autres implémentations de dictionnaires avec leur propre comportement en matière d’ordre et de comparaison. Choisissez en fonction du type et du comportement spécifiques dont votre code a besoin. Évitez de supposer que l’une ou l’autre collection est plus rapide sans mesurer la charge de travail réelle.

Cas d’utilisation pratiques

Utilisez un dictionnaire ordonné pour les champs d’utilisateur ou de configuration lorsque la sortie doit suivre une séquence choisie. Utilisez une table de hachage pour compter les mots par clé. Ces exemples montrent les deux tâches ; le code est autonome et aucune sortie n’est revendiquée pour lui.

$user = [ordered]@{
    Name = 'John Doe'
    Email = 'johndoe@example.com'
    Role = 'Admin'
}
$user.GetEnumerator() | ForEach-Object { "{0}: {1}" -f $_.Key, $_.Value }

$text = 'apple banana apple orange apple banana'
$wordCount = @{}
$text.Split() | ForEach-Object {
    if ($wordCount.ContainsKey($_)) {
        $wordCount[$_] += 1
    } else {
        $wordCount[$_] = 1
    }
}
$wordCount.GetEnumerator() | Sort-Object Name | ForEach-Object {
    "{0}: {1}" -f $_.Name, $_.Value
}

Conclusion

Utilisez les tableaux pour les séquences ordonnées que vous traitez par position, les tables de hachage pour la recherche par clé, et les dictionnaires ordonnés lorsque la séquence d’insertion fait partie des données que vous présentez. N’oubliez pas que += pour les tableaux attribue un nouveau tableau, que le filtrage renvoie un résultat à attribuer, et que le tri des entrées énumérées d’une table de hachage modifie le résultat affiché plutôt que la table elle-même.

Questions fréquemment posées (FAQ)

Quelle est la différence entre une table de hachage et un dictionnaire dans PowerShell ?

Dans l’utilisation quotidienne de PowerShell, « dictionnaire » peut décrire une structure clé-valeur générale, et @{} crée une table de hachage PowerShell reposant sur le type .NET System.Collections.Hashtable. La bibliothèque de classes .NET possède également des types de dictionnaires distincts, donc vérifiez le type concret lorsque les API exigent une implémentation particulière.

Comment ajouter ou supprimer des éléments d’un tableau PowerShell ?

Ajoutez avec $array += 'newItem', puis attribuez le résultat à la variable. Pour supprimer les valeurs correspondantes, filtrez et attribuez le résultat, par exemple $array = @($array | Where-Object { $_ -ne 'itemToRemove' }). Ces opérations produisent un tableau en résultat ; elles ne redimensionnent pas le tableau existant en place.

Puis-je trier une table de hachage dans PowerShell ?

Triez ses entrées pour l’affichage avec $hash.GetEnumerator() | Sort-Object Name. Cela renvoie des entrées triées et laisse $hash inchangé. Utilisez [ordered]@{} lorsque vous avez besoin de l’ordre d’insertion ; il conserve l’ordre dans lequel les entrées ont été ajoutées, plutôt que de trier les clés par ordre alphabétique.