Хэш-таблицы
Синтаксис:
Полезный совет
Обозначение ~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 представляет собой коллекцию объектов пары ключ/значение, которая поддерживает эффективное извлечение значения при индексации по ключу. Каждая пара ключ/значение представляет собой элемент, который хранится в некотором типе объекта, определяемом реализацией.
Ключ элемента не может иметь нулевое значение. Ограничений на тип ключа или значения нет. Дублирующиеся ключи не поддерживаются.
Учитывая объект пары ключ/значение, ключ и связанное значение можно получить с помощью свойств экземпляра Key и Value соответственно.
Учитывая один или несколько ключей, соответствующие значения могут быть доступны через оператор индекса Hashtable []
(§7.1.4.3).
Все хеш-таблицы имеют тип Hashtable
(§4.3.3).
Порядок ключей в коллекции, возвращаемой Keys, не указан; однако это тот же порядок, что и связанные значения в коллекции, возвращаемой Values.
Вот несколько примеров с использованием 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
хранятся в объекте типа 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 Перебор хеш-таблицы
Чтобы обработать каждую пару в Hashtable
, используйте свойство Keys, чтобы получить список ключей в виде массива, а затем переберите элементы этого массива, получив связанное значение через свойство Value или нижний индекс, как показано ниже.
$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123}
foreach ($e in $h1.Keys) {
"Key is " + $e + ", Value is " + $h1[$e]
}