Соответствие.По умолчанию

Конструкторы

Создает пустое соответствие (без элементов).

Синтаксис

Новый Соответствие()

Примеры платформы

ПараметрыОбработки = Новый Соответствие;
Полное описание, параметры и ограничения

Соответствие.По умолчанию

Соответствие (Map)

По умолчанию

Доступен, начиная с версии 8.0.

Синтаксис:
Новый Соответствие()
Описание:

Создает пустое соответствие (без элементов).

Пример:

ПараметрыОбработки = Новый Соответствие;

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Различить ключ 1, строку «1» и отсутствующее значение

Соответствие допускает ключи разных типов. Получить возвращает Неопределено и для отсутствующего ключа, и для сохранённого такого значения; факт наличия проверяем отдельным перебором.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Выполняйте в серверном общем модуле учебной базы. Все коллекции и вложенные значения создаются кодом; метаданные, файлы и интернет не нужны.

  2. Индексы массивов начинаются с 0. Ключ соответствия — отдельное значение и не обязательно совпадает с индексом/порядком обхода.

КоличествоПоКлючу = Новый Соответствие;
Сообщить(КоличествоПоКлючу.Количество() = 0);
КоличествоПоКлючу.Вставить(1, 3);
КоличествоПоКлючу.Вставить("1", 7);
КоличествоПоКлючу.Вставить("ОжидаетУточнения", Неопределено);
Сообщить(КоличествоПоКлючу.Количество() = 3);
Сообщить(КоличествоПоКлючу.Получить(1) = 3);
Сообщить(КоличествоПоКлючу.Получить("1") = 7);
Сообщить(КоличествоПоКлючу.Получить("НетКлюча") = Неопределено);
Сообщить(КоличествоПоКлючу.Получить("ОжидаетУточнения") = Неопределено);
ЕстьОжидающий = Ложь;
ЕстьНесуществующий = Ложь;
Для Каждого Пара Из КоличествоПоКлючу Цикл
    Если Пара.Ключ = "ОжидаетУточнения" Тогда ЕстьОжидающий = Истина; КонецЕсли;
    Если Пара.Ключ = "НетКлюча" Тогда ЕстьНесуществующий = Истина; КонецЕсли;
КонецЦикла;
Сообщить(ЕстьОжидающий);
Сообщить(Не ЕстьНесуществующий);
КоличествоПоКлючу.Вставить(1, 5);
Сообщить(КоличествоПоКлючу.Количество() = 3);
Сообщить(КоличествоПоКлючу.Получить(1) = 5);

Разбор по шагам

  1. Создаём пустое соответствие конструктором по умолчанию и добавляем числовой/строковый ключи с одинаковым внешним написанием.

  2. Число 1 и строка 1 — разные ключи. Каждый возвращает своё количество, 3 и 7.

  3. Ключ ОжидаетУточнения существует со значением Неопределено. Возвращаемое Неопределено само по себе не доказывает отсутствие ключа.

  4. Перебор КлючИЗначение проверяет наличие двух строковых ключей без предположений о порядке.

  5. Повторная Вставить с ключом 1 заменяет значение 3 на 5, а не создаёт четвёртую пару.

Как проверить результат

  1. Все десять логических сообщений дают Истина.

  2. В конце числовой ключ 1 содержит 5, строковый 1 — 7; всего три пары.

  3. ОжидаетУточнения существует, НетКлюча отсутствует, хотя Получить для обоих возвращает Неопределено.

Ожидаемый результат

Показаны типизированные ключи, замена значения и неоднозначность отсутствующего/неопределённого значения.

На что обратить внимание

  1. Не подменяйте числовые идентификаторы строками в одной части кода без согласованной нормализации ключей.

  2. У Соответствие нет метода Свойство как у Структура. Проверку наличия выбирайте по контракту вашей коллекции.

  3. Для устойчивой логики с nullable-значениями можно хранить собственную структуру статуса/значения, не смешивая отсутствие и ожидание уточнения.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Создать изменяемое соответствие из фиксированного и не перепутать уровни копии

Состав пар нового контейнера независим, но вложенную структуру товара нужно копировать отдельно, если требуется независимость её полей.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Выполняйте в серверном общем модуле учебной базы. Все коллекции и вложенные значения создаются кодом; метаданные, файлы и интернет не нужны.

  2. Индексы массивов начинаются с 0. Ключ соответствия — отдельное значение и не обязательно совпадает с индексом/порядком обхода.

Товар = Новый Структура("Название,Количество", "Книга", 3);
Источник = Новый Соответствие;
Источник.Вставить("A-01", Товар);
Фиксированный = Новый ФиксированноеСоответствие(Источник);
Рабочий = Новый Соответствие(Фиксированный);
Рабочий.Вставить("B-02", Новый Структура("Название,Количество", "Ручка", 1));
Сообщить(Рабочий.Количество() = 2);
Сообщить(Фиксированный.Количество() = 1);
Сообщить(Фиксированный.Получить("B-02") = Неопределено);
РабочийТовар = Рабочий.Получить("A-01");
РабочийТовар.Количество = 5;
Сообщить(Товар.Количество = 5);
Сообщить(Фиксированный.Получить("A-01").Количество = 5);
Независимый = Новый Структура("Название,Количество", РабочийТовар.Название, РабочийТовар.Количество);
Рабочий.Вставить("A-01", Независимый);
Независимый.Количество = 9;
Сообщить(Рабочий.Получить("A-01").Количество = 9);
Сообщить(Товар.Количество = 5);
Рабочий.Удалить("A-01");
Сообщить(Рабочий.Количество() = 1);
Сообщить(Фиксированный.Получить("A-01").Количество = 5);
Сообщить(Источник.Количество() = 1);

Разбор по шагам

  1. Фиксируем собственное соответствие с одним товаром, затем создаём новое изменяемое соответствие из него.

  2. Добавление B-02 меняет только состав пар рабочего контейнера. В фиксированном остаётся одна пара A-01.

  3. Первое изменение количества показывает общую вложенную структуру: обе коллекции указывают на этот объект.

  4. Для независимости двух скалярных полей создаём новую структуру и заменяем пару A-01 рабочего соответствия. Изменение 9 теперь не затрагивает исходные 5.

  5. Удаляем A-01 только из рабочего соответствия. Фиксированный источник и первоначальное соответствие сохраняют свою пару.

Как проверить результат

  1. Все десять логических сообщений дают Истина.

  2. После первого изменения общий товар содержит 5. После отдельного копирования полей рабочий товар содержит 9, исходный — 5.

  3. В конце рабочий контейнер содержит только B-02; фиксированный и исходный — только A-01 с количеством 5.

Ожидаемый результат

Разобрана независимость контейнера и явное копирование вложенных данных товара.

На что обратить внимание

  1. Копирование двух скалярных полей не является универсальным глубоким клонированием произвольного графа объектов.

  2. Удалить ключ из рабочего соответствия не удаляет товар из информационной базы.

  3. Не пытайтесь изменять состав пар ФиксированноеСоответствие; для этого и создаётся новый Соответствие.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.