Структура и соответствие — типы данных которые предназначены для хранения временных наборов коллекций значений в течении сеанса работы пользователя. Объекты этих типов не хранятся непосредственно в базе данных, а создаются в процессе работы разработчиком алгоритмов на встроенном языке и используются для накопления, структурирования, анализа, передачи и обработки информации.
Каждый элемент коллекции типа структура или соответствие представляет из себя пару из ключа и установленного соответствующего ключу значения. Основное функциональное различие между этими типами данных заключается в типе значения ключа. В типе данных Соответствие, ключ может быть любого типа, а в структуре только строкового. Рассмотрим и проанализируем основные различия типов данных в виде таблицы составленной на основе справки из синтаксис помощника.
Структура | Соответствие |
Элементы коллекций: | |
КлючИЗначение | КлючИЗначение |
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции. | Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции. |
Возможно обращение к значению элемента посредством оператора […]. В качестве аргумента передается значение ключа элемента. | Возможно обращение к значению элемента посредством оператора […]. В качестве аргумента передается значение ключа элемента. |
Свойства: | |
<Имя ключа> (<Key name>) | |
Методы: | |
Вставить (Insert) Количество (Count) Очистить (Clear) Свойство (Property) Удалить (Delete) | Вставить (Insert) Количество (Count) Очистить (Clear) Получить (Get) Удалить (Delete) |
Конструкторы: | |
На основании фиксированной структуры По ключам и значениям | На основании фиксированного соответствия По умолчанию |
Описание: | |
Представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка. К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства. Структура используется обычно для хранения небольшого количества значений, каждое из которых имеет некоторое имя. | Представляет доступ к соответствию. Не используется в данных формы. |
Доступность: | |
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер). Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: Structure. | Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер). Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: Map. |
Как можно видеть из таблицы сравнения оба типа очень похожи и имеют аналогичный способ работы с экземплярами этих типов. Основное отличие заключается в способе получения элемента из коллекции. В структуре получение значения выполняется аналогично работе со свойством или чтением реквизита объекта метаданных т.е. через точку. Например:
Структура = Новый Структура; Структура.Вставить("Цвет","Зеленый"); Сообщить(Структура.Цвет); //Зеленый
Получение значения в соответствии происходит иначе. Для того чтобы прочитать значение соответствия нужно использовать конструкцию с квадратными скобками Соответствие.[«<ИмяКлюча>»]. Например:
Соответствие = Новый Соответствие; Соответствие.Вставить("Цвет","Синий"); Сообщить(Соответствие["Цвет"]); // Синий
Для обоих типов доступен обход коллекции с использованием цикла по обходу коллекции. Например:
Структура = Новый Структура; Структура.Вставить("Цвет","Зеленый"); Структура.Вставить("Размер",40); Структура.Вставить("Материал","Пластик"); Для Каждого ЭлементКоллекции Из Структура Цикл Сообщить(ЭлементКоллекции.Ключ+" "+ЭлементКоллекции.Значение); //-----Результат вывода------ // Цвет Зеленый // Размер 40 // Материал Пластик КонецЦикла; Соответствие = Новый Соответствие; Соответствие.Вставить("Цвет","Синий"); Соответствие.Вставить(40,150); Соответствие.Вставить("Вес",90); Для Каждого ЭлементКоллекции Из Соответствие Цикл Сообщить(ЭлементКоллекции.Ключ+" "+ЭлементКоллекции.Значение); //-----Результат вывода------ // Цвет Синий // 150 <--- Обратите внимание ключ 40 выведен не будет так как это не строка, чтобы его вывести нужно Ключ полученного элемента коллекции преобразовать к строке Строка(ЭлементКоллекции.Ключ) // Вес 90 КонецЦикла;
Кроме того структура при добавлении в нее элемента, автоматически упорядочивает элементы по ключу, а соответствие нет.