Ключ произвольного типа
Ключом может быть значение любого типа, поддерживающего сравнение на равенство — строка, число, дата, булево, ссылка на объект, даже массив или структура. Для примитивных типов (Число, Строка, Дата, Булево) сравнение при поиске ключа — по значению; для ссылочных типов (СправочникСсылка и т.п.) — по значению самой ссылки, то есть тоже фактически «по значению» (два СправочникСсылка с одинаковым GUID — один и тот же ключ), а не по адресу объекта в памяти:
Соответствие = Новый Соответствие;
Соответствие.Вставить(Справочники.Товары.НайтиПоКоду("001"), "любимый");
Ссылка2 = Справочники.Товары.НайтиПоКоду("001"); // другая переменная, тот же элемент справочника
Соответствие.Получить(Ссылка2); // "любимый" — нашлось по значению ссылкиДля изменяемых коллекций (Массив, Структура, Соответствие) в качестве ключа — сравнение по ссылке на сам объект, а не по содержимому (см. особенности массива): два разных объекта Массив с одинаковыми элементами — разные ключи.
Порядок элементов
Как и Структура, соответствие — неупорядоченная коллекция: порядок Для Каждого не гарантирован платформой, подробнее — Обход.
Передача по ссылке
Соответствие — ссылочный тип, поведение при передаче в процедуры/функции такое же, как у Массива и Структуры: мутация содержимого видна снаружи, Знач защищает только от переприсвоения параметра целиком.
Сравнение и проверка типа
Соответствие1 = Соответствие2 сравнивает ссылки на объект, а не содержимое.
ТипЗнч(Соответствие) = Тип("Соответствие"); // Истина, если Соответствие — именно СоответствиеСоответствие или Структура
| Структура | Соответствие | |
|---|---|---|
| Тип ключа | только строка | любой |
| Доступ | точка или ["Ключ"] | только [Ключ] или Получить() |
| Отсутствующий ключ | исключение (кроме Свойство()) | Получить() — Неопределено, [] — исключение |
Если ключи — фиксированный набор имён, известных заранее (настройки, параметры) — удобнее структура: обращение через точку короче и читаемее. Если ключ — произвольное значение, не известное на этапе написания кода (число, дата, ссылка на элемент справочника) — только соответствие.