Соответствие
Соответствие — это коллекция пар «ключ-значение». Ключи должны быть уникальны. Каждому ключу соответствует только одно значение. Порядок обхода элементов соответствует порядку добавления элементов в соответствие. Соответствие позволяет хранить элементы произвольных типов.
Для описания ключей и их значений используется тип КлючИЗначение<ТипКлюча,ТипЗначения>, который имеет соответствующие свойства: Ключ и Значение.
Изменяемые и неизменяемые соответствия
Соответствия делятся на два вида:
- В неизменяемом соответствии нельзя изменять, добавлять или удалять элементы. Для описания такого соответствия в языке используется тип 
ЧитаемоеСоответствие<ТипКлюча,ТипЗначения>. - В изменяемом соответствии можно изменять, добавлять или удалять элементы. Для описания такого соответствия в языке используется тип 
Соответствие<ТипКлюча,ТипЗначения>. 
Создание соответствия
Вы можете создать соответствие с помощью конструктора типа или с помощью литерала.
Элементы соответствия заключаются в символы {}. Ключ отделяется от его значения с помощью символа :, а сами пары «ключ-значение» разделяются символом ,.
// Литерал пустого соответствия
знч ПустоеСоответствие = <Строка, Число>{:}
// Литер ал соответствия с элементами, хранящими ID и имя сотрудника
// Типы ключа и значения выводятся из литерала
знч Сотрудники = {10000: "Смирнов Алексей", 10001: "Петров Олег"}
// Соответствие, содержащее элементы различных типов
знч СоответствиеОбъектов = <Объект, Объект>{"Ключ1" : 1, Истина : "Значение2"}
Создание копированием
Если необходимо создать копию какого-либо соответствия, то это можно сделать с помощью конструктора копирования. В этом случае новое соответствие будет являться полной копией исходного.
знч Сотрудники = {10000: "Смирнов Алексей", 10001: "Петров Олег"}
знч СотрудникиКопия = новый Соответствие<Число, Строка>(Сотрудники)
Создание из массива
Используйте методы ВСоответствие(), ВСоответствиеСКлючами() и ВСоответствиеСоЗначениями() для преобразования массивов данных в соответствия.
структура Сотрудник
    знч Ид: Число
    пер Имя: Строка
;
метод СоздатьСотрудников()
    // Заполнение массива сотрудников
    знч Сотрудники = <Сотрудник>[]
    Сотрудники.Добавить(новый Сотрудник(10000, "Смирнов Алексей"))
    Сотрудники.Добавить(новый Сотрудник(10001, "Петров Олег"))
    Сотрудники.Добавить(новый Сотрудник(10002, "Иванов Михаил"))
    
    // Преобразование массива в соответствие
    знч СотрудникиСоответствие = Сотрудники.ВСоответствие(Элемент -> Элемент.Ид, Элемент -> Элемент.Имя)
;   // {10000: "Смирнов Алексей", 10001: "Петров Олег", 10002: "Иванов Михаи л"}
Вставка элементов
Если на момент создания соответствия неясно, какие данные будут в нем храниться, вы можете добавить их позднее с помощью методов Вставить() или ВставитьВсе() (для вставки нескольких элементов).
знч Товары = новый Соответствие<Число, Строка>()
Товары.Вставить(1877210255, "Холодильник")
Товары.Вставить(1805231477, "Телевизор")
Если в момент вставки элемента соответствие уже содержит значение с указанным ключом, то значение в соответствии заменяется на добавляемое значение. Другими словами, в результате выполнения следующего кода значением элемента с ключом Пи будет 3.141592654, а не 3:
знч Константы: Соответствие<Строка, Число>
Константы.Вставить("Пи", 3)
Константы.Вставить("Пи", 3.141592654)
Вы также можете использовать перегрузки метода ВставитьЕслиОтсутствует(), чтобы добавить элемент в соответствие только в том случае, если ключ, указанный в методе, отсутствует в соответствии. Если ключ в соответствии уже есть, метод ВставитьЕслиОтсутствует() не будет изменять существующую пару. При выполнении проверки анализируется только значение ключа.
Доступ к элементам соответствия
Операция доступа по индексу
В этом случае в квадратных скобках [] указывается ключ, значение которого необходимо получить.
знч Сотрудники = {10000: "Смирнов Алексей", 10001: "Петров Олег"}
знч Сотрудник = Сотрудники[10001] // "Петров Олег"
Если в соответствии не существует элемента с указанным ключом, то будет выброшено исключение. Операцию доступа по индексу можно использовать как в правой, так и в левой части инструкции присваивания. В случае использования в левой части инструкции присваивания операция работает аналогично методу Вставить().
Функциональный способ
Для обращения к элементу соответствия функциональным способом используйте один из следующих методов:
Получить()— возвращает значение по указанному ключу. Если соответствие не содержит заданный ключ, выбрасывается исключение.ПолучитьИлиНеопределено()— возвращает значение по указанному ключу илиНеопределено, если соответствие не содержит заданный ключ.ПолучитьИлиУмолчание()— возвращает значение по указанному ключу. Если соответствие не содержит заданный ключ, возвращается значение по умолчанию. Значение по умолчанию может вычисляться с помощью функционального типаВычислительУмолчания. При этом значение не вычисляется, если в конкретном вызове метода оно не требуется.
знч Сотрудники = {10000: "Смирнов Алексей", 10001: "Петров Олег", 10002: "Иванов Михаил"}
знч Ид = 10001
// Получение сотрудника по ID
знч Результат1 = Сотрудники.Получить(Ид) // "Петров Олег"
знч Результат2 = Сотрудники.ПолучитьИлиНеопределено(Ид)
знч Результат3 = Сотрудники.ПолучитьИлиУмолчание<Строка>(Ид, () -> "Сотрудник с ID %{Ид} не найден.")
Обход элементов соответствия
Для обхода элементов соответствия используйте цикл для из. Каждый элемент имеет тип КлючИЗначение<ТипКлюча,ТипЗначения>, позволяющий получить доступ к ключу соответствия и его значению.
метод ПолучитьСписокСотрудников(Сотрудники: Соответствие<Число, Строка>): Массив<Строка>
    знч СписокСотрудников: Массив<Строка> = []
    для Сотрудник из Сотрудники
        СписокСотрудников.Добавить("ID: %{Сотрудник.Ключ}, Имя: %{Сотрудник.Значение}")        
    ;
    возврат СписокСотрудников
;
В результате работы метода вернется массив, содержащий элементы вида:
[0]: "ID: 10000, Имя: Смирнов Алексей"
[1]: "ID: 10001, Имя: Петров Олег"
[2]: "ID: 10002, Имя: Иванов Михаил"
Проверка наличия элемента в соответствии
При использовании соответствия часто возникает необходимость проверить, содержит ли соответствие какой-либо ключ или значение. Выполнить такую проверку можно с помощью следующих методов:
Содержит()— проверяет, содержится ли указанная пара «ключ-значение» в соответствии.СодержитЗначение()— проверяет, содержится ли указанное значение в соответствии.СодержитКлюч()— проверяет, содержится ли указанный ключ в соответствии.
метод НайтиСотрудника(Ид: Число, Сотрудники: Соответствие<Число, Строка>): Строка
    // Возвращает сотрудника по ID
    если Сотрудники.СодержитКлюч(Ид)
        возврат Сотрудники.Получить(Ид)
    ;             
    // Если сотрудник не найден, выбрасывается исключение
    выбросить новый ИсключениеНедопустимыйАргумент("Сотрудник с ID %{Ид} не найден.")
;
Также вы можете получить фиксированную коллекцию, которая содержит ключи или значения исходного соответствия. Для выполнения этого действия используйте методы Ключи() и Значения().
Сравнение соответствий
Поддерживается сравнение соответствий на равенство или неравенство. Два соответствия считаются равными, если размеры этих соответствий совпадают, ключи одного соответствия являются ключами другого, а также попарно совпадают все значения одинаковых ключей. Допуск ается сравнивать значения типа Соответствие<ТипКлюча,ТипЗначения> и ЧитаемоеСоответствие<ТипКлюча,ТипЗначения>.
знч ОбычноеСоответствие = новый Соответствие<Строка, Число>({"Ключ1": 1, "Ключ2": 2})
знч ЧитаемоеСоответствие = новый ЧитаемоеСоответствие<Объект, Объект>({"Ключ2": 2, "Ключ1": 1})
  
знч Равны = ОбычноеСоответствие == ЧитаемоеСоответствие // Истина
Очистка соответствия
Очистка соответствия выполняется следующим образом:
- с помощью метода 
Очистить(), который удаляет все элементы из соответствия; - с помощью метода 
Удалить(), который удаляет элемент с указанным ключом. 
знч Сотрудники = {10000: "Смирнов Алексей", 10001: "Петров Олег"}
Сотрудники.Удалить(10000) // Удаление сотрудника "Смирнов Алексей"
Сотрудники.Очистить() // Очистка соответствия