Соответствие

Общее описание

Соответствие — это коллекция экземпляров типа КлючИЗначение<ТипКлюча,ТипЗначения>. Порядок обхода элементов соответствует порядку добавления элементов в соответствие. Соответствие позволяет хранить элементы произвольных типов.

Соответствия могут быть неизменяемыми и изменяемыми:

  • в неизменяемом соответствии нельзя изменять, добавлять или удалять элементы. Тип для неизменяемого соответствия называется ЧитаемоеСоответствие<ТипКлюча,ТипЗначения>;
  • в изменяемом соответствии можно изменять, добавлять или удалять элементы. Тип для изменяемого соответствия называется Соответствие<ТипКлюча,ТипЗначения>.

Экземпляр КлючИЗначение<ТипКлюча,ТипЗначения>

Экземпляр КлючИЗначение<ТипКлюча,ТипЗначения> два свойства: Ключ и Значение. В качестве некоторой аналогии можно представить ситуацию следующим образом: Ключ — это имя переменной, которой присваивается Значение. Однако аналогия является достаточно условной, т. к. в качестве имени переменной может выступать только строка символов определенного формата, а в качестве значения свойства Ключ может выступать экземпляр любого типа.

Создание соответствия и заполнение значениями

Соответствие можно создать несколькими способами:

  • с помощью конструктора пустого соответствия;
  • с помощью литерала.
Данные инициализации заключаются в символы {}. Сами данные инициализации состоят из пар «ключ-значение». Пары разделяются символом ,. Значение ключа отделяется от собственно значения символом :.
// Литерал пустого соответствия, 
// в котором ключ типа Строка, а значение типа Число
пер КурсыВалют1 = <Строка, Число>{:}

// Литерал соответствия с элементами.
// Типы ключа и значения будут выведены из литерала.
пер КурсыВалют2 = {"Рубль РФ": 1, "Рубль Белоруссии": 31.01}

// Конструктор пустого соответствия и вставка элемента
КурсыВалют3 = новый Соответствие<Строка, Число>()
КурсыВалют3.Вставить("Рубль РФ", 1)

Если на момент создания соответствия неясно, какие данные в нем будут храниться, то добавить эти данные можно потом. В примере выше так делается с соответствиями КурсыВалют1 и КурсыВалют3.

Если к моменту вставки элемента соответствие уже содержит значение с указанным ключом, то значение в соответствии будет заменено на значение, которое вставляется в рассматриваемом вызове. Другими словами, в результате исполнения следующего кода, в качестве значения элемента соответствия с ключом пи будет значение 3.141592654, а не просто 3:
пер Значения: Соответствие<Строка, Число>
Значения.Вставить("пи", 3)
Значения.Вставить("пи", 3.141592654)

Если необходимо создать копию какого-либо соответствия, то это можно сделать с помощью конструктора копирования. В этом случае новое соответствие будет являться полной копией исходного.

Соответствие также позволяет вставить какую-либо пару значений только в том случае, если этой пары еще нет в соответствии. Метод ВставитьЕслиОтсутствует() создаст новый элемент в соответствии в том случае, если ключ, используемый в методе, отсутствует в соответствии. Если ключ в соответствии уже есть, то метод ВставитьЕслиОтсутствует() не будет изменять существующую пару. При выполнении проверки анализируется только значение ключа.

Очистка соответствия выполняется:

  • либо методом Очистить(), при этом из соответствия удаляются все элементы;
  • либо с помощью метода Удалить(), который удаляет элемент к указанным ключом.

Элементы соответствия и работа с ними

Обращение к элементу соответствия может быть выполнено двумя способами:
С помощью операции доступа по индексу []
В этом случае в квадратных скобках указывается ключ, значение которого необходимо получить. Например, выражение Значения["пи"] вернет значение, сохраненное в соответствии Значения с ключом пи. Если в данном соответствии не существует элемента с ключом пи, то будет вызвано исключение. Этот способ можно использовать как в правой, так и в левой части инструкции присваивания. В случае использования в левой части инструкции присваивания, такой способ работает аналогично методу Вставить().
Функциональный способ
В этом случае нужно использовать метод Получить(), в качестве параметра которого выступает значение ключа. Обращение функциональным способом будет выглядеть следующим образом:
пер Элемент = Значения.Получить("пи") 
Кроме метода Получить() можно использовать метод ПолучитьИлиУмолчание(). Этот метод вернет значение, соответствующее указанному ключу, если ключ имеется в соответствии, и значение по умолчанию, если ключ отсутствует в соответствии. Значение по умолчанию указывается в качестве параметра метода ПолучитьИлиУмолчание().

Кроме получения значения соответствия по индексу, предоставляется возможность обойти коллекцию с помощью инструкции для из (в обоих вариантах).

При использовании соответствия частым вариантом использования является проверка наличия в соответствии какого-либо ключа или значения. Выполнить такую проверку можно с помощью методов СодержитКлюч() и СодержитЗначение(). Также соответствие позволяет получить фиксированную коллекцию, которая содержит ключи или значения исходного множества. Для выполнения этого действия предназначены методы Ключи() и Значения(). Как следует из типа получаемого значения, полученные множества доступны только на чтение.

Сравнение соответствий

Допустимо сравнение соответствий на равенство или неравенство. Два соответствия будут считаться равными, если размеры этих соответствий совпадают, ключи одного соответствия являются ключами другого, а также попарно совпадают все значения одинаковых ключей. Допускается сравнивать значения типа Соответствие<ТипКлюча,ТипЗначения> и ЧитаемоеСоответствие<ТипКлюча,ТипЗначения>.