Хэш-таблицы


Синтаксис:

Полезный совет

Обозначение ~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]
}