Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Редакционная заметка
Важный
Спецификация языка Windows PowerShell была опубликована в декабре 2012 года и основана на Windows PowerShell 3.0. Эта спецификация не отражает текущее состояние PowerShell. Нет плана обновить эту документацию, чтобы отразить текущее состояние. Эта документация представлена здесь для получения исторической справки.
Документ спецификации доступен в формате Microsoft Word из Центра загрузки Майкрософт: https://www.microsoft.com/download/details.aspx?id=36389. Этот документ Word был преобразован для представления на Microsoft Learn. Во время преобразования некоторые редакционные изменения были внесены в соответствии с форматированием платформы Docs. Исправлены некоторые опечатки и незначительные ошибки.
Синтаксис:
Совет
Нотация ~opt~
в определениях синтаксиса указывает, что лексическая сущность является необязательной в синтаксисе.
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
Тип Hashtable представляет коллекцию объектов пар ключ/значение , которые поддерживают эффективное извлечение значения при индексировании по ключу. Каждая пара "ключ-значение" — это элемент , который хранится в определенном типе объекта реализации.
Ключ элемента не может быть значением NULL. Нет ограничений на тип ключа или значения. Повторяющиеся ключи не поддерживаются.
Учитывая объект пары "ключ-значение", ключ и связанное значение можно получить с помощью свойства экземпляра Key и Value соответственно.
Учитывая один или несколько ключей, доступ к соответствующим значениям можно получить с помощью оператора индексации хеш-таблицы []
(§7.1.4.3).
Все хэш-файлы имеют тип Hashtable
(§4.3.3).
Порядок ключей в коллекции, возвращаемой ключами, не указан; однако это тот же порядок, что и связанные значения в коллекции, возвращаемой значениями.
Вот несколько примеров, связанных с хэш-таблицами:
$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
элементы хранятся в объекте типа DictionaryEntry, а коллекции, возвращаемые ключами и значениями, имеют тип ICollection.
10.2 Создание хеш-таблицы
Hashtable
создается с помощью хэш-литерала (§7.1.9) или командлета New-Object. Его можно создать с нуля или несколькими элементами. Свойство Count возвращает текущее число элементов.
10.3. Добавление и удаление элементов Hashtable
Элемент можно добавить в Hashtable
, назначив (§7.11.1) значение к несуществующему имени ключа или подстроку (§7.1.4.3), использующее несуществующее имя ключа. Для удаления элемента требуется использование метода Remove. Например
$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
. Существующие хэштебли не изменяются. Дополнительные сведения см. в §7.7.4.
10.5 Хэш-таблицы в качестве ссылочных типов
Поскольку Hashtable
является ссылочным типом, присваивание Hashtable
включает в себя неглубокое копирование; то есть переменная ссылается на тот же Hashtable
, копия Hashtable
не производится. Например
$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 Перечисление по хэш-таблице
Чтобы обработать каждую пару в
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123}
foreach ($e in $h1.Keys) {
"Key is " + $e + ", Value is " + $h1[$e]
}
PowerShell