1с преобразовать соответствие в структуру
Соответствие и структура очень близкие по сути коллекции.
Соответствие – это коллекция пар ключ и значение.
Структура – это коллекция пар ключ и значение.
Как видите, из определений объектов не отличишь структуру от соответствия, а разница между ними есть и находится в свойстве Ключ. Ключ в структуре может быть только строкой, а в соответствии может быть любым типом.
Что понимается под словом «Ключ»? Ключ – это ключевое поле которое не может иметь двух одинаковых значений - является уникальным в пределах коллекции. Т.е. если мы попытаемя в структуру имеющую ключ "Номенклатура" и значение "Диван" поместить такой же ключ, но с значением "Кресло", то программа просто заменит старое значение "Диван" на новое "Кресло", а не добавит ещё один ключ "Номенклатура" со значением "Кресло".
Основное использование объекта типа "Структура":
Этот объект часто используется в качестве способа передачи параметров в процедуры и функции.
Основное использование объекта типа "Соответствие":
Имя типа объекта оправдывает свое название, соответственно можно связывать два разных объекта системы, что позволяет избежать ипользования ТЗ с двумя колонками.
У этих объектов одинаковые методы для добавления и удаления элементов, но разные для получения.
У структуры имеется метод "Свойство" который проверяет есть ли такой ключ в коллекции и возвращает в переменную полученное значение. Если ключа нет, то возвращается Неопределено. При этом метод является функцией и возвращает Булево( Истина или Ложь )
В Соответствии для этого есть метод "Получить" в параметрах которого передается ключ парное значение которого мы ищем. Т.е. нет отдельной функции для проверки, но если ключ не найден, то возвращается Неопределено, что и можно использовать для этой же цели(текст изменен, благодаря замечаниям в комментариях).
Комментарии
Ольга, как я понимаю у Вас задача быстро сравнивать Списки значений, но соответствие здесь не поможет, т.к. программа при проверки уникальности ключа будет сравнивать не значения списка, а ссылку(указатель) на список. Если вы создадите два одинаковых списка значений и вставите их в соответствие, то программа их расположит как два разных ключа - 2 значения, но повторное добавление этих списков значений в соответствие не даст дублирования и количество значений так и останется 2.
Скажите, пожалуйста, как в ключ Соответствия засунуть список значений (массив), и потом искать этот ключ, сравнивая ключ как сам список значений, а не какой-то адрес (хэш). Какую структуру данных использовать для ключа?
Проблема в том, что каждый раз он видит массив, как новый, хотя его значения такие же, как в массиве уже существующего ключа Соответствия.
Не обязательно точно знать ключ соответствия.
Соответствие можно циклом Для каждого обойти, как и любую коллекцию.
И запросто узнать все ключи.
На счет точно знать есть ли у соответствия ключ, это да. Но добавьте чтобы было понятно (немного получается, что знать нужно и ошибиться нельзся, что в случае не нахождения по сути ключа, вернет Неопределно) поэтому это тоже свое рода проверка на наличие ;)
"Ключ в соответствии может быть только строкой, а в структуре может быть любым типом"
Наоборот, в структуре - строка, в соответствии - произвольный тип
Мне кажется, не надо было такую свежую версию БСП брать. Что-нибудь из 3.0.х было бы более востребовано.
Хотя, далеко не все описанные методы являются "свежими".
(3) Я описал наиболее полезные функции которые помогут в решении многих задач. конечно это далеко не весь список, будем дополнять по мере возможности новыми процедурами и функциями)
БСП использовал наиболее актуальную, но большая часть используется и в 3.0 ) спасибо
(0) А где же ОбщегоНазначенияКлиентСервер: Проверить(. ) и ПроверитьПараметр(. ) .
Соблюдение контрактов - это наше все;)
Спасибо, отличная тема для циклов статей!
Предложение: указывать тип возвращаемого значения (для функций), было бы удобно)
(7) Вообще в модулях описывается каждая процедура и функция )
но постараюсь дополнить в статье в ближайшее время!)
(13) От перестановки слагаемых сумма не меняется)
Результат такой же - решения разные.
Кстати для получения текущего пользователя на Клиенте:
Выдает ошибку:
Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Document is empty
Эту ТаблицаЗначений надо заранее создать и столбиками заполнить или как вообще.
Возвращает значение дополнительного свойства объекта:
УправлениеСвойствами.ЗначениеСвойства
Мне кажется часто нужен и достоин упоминания.
Просмотры 23960
Загрузки 0
Рейтинг 208
Создание 10.03.20 09:20
Обновление 14.01.21 12:35
№ Публикации 1207488
Тип файла Нет файла
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Да
См. также
Библиотека стандартных подсистем (Механизм БСП) Промо
Конфигурации в 1С пишутся для пользователей и по их «правилам» (клиент всегда прав), поэтому в основном все конфигурации разные, но достаточно часто в них используются одни и те же объекты, которые незначительно отличаются друг от друга. Действительно, сложно представить конфигурацию, где не фигурировали бы такие сущности как номенклатура, контрагенты, пользователи, валюта. И некоторые задачи являются типичными: возможность базового разграничения прав, работа с электронной почтой, задачи пользователям и т.д. Но.
03.03.2017 86292 V.Stavinsky 22
Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП
В данной статье я рассматриваю несколько полезных "классических" функций и процедур для работы с данными, которые уже встроены в БСП и готовы к использованию.
25.04.2022 2812 quazare 11
Правила регистрации объектов 1С:БСП
Здравствуйте, коллеги! В статье рассмотрим работу с правилами регистрации объектов в библиотеке стандартных подсистем 1С.
20.04.2022 871 Koder_Line 6
Многопоточный режим выполнения процедуры с помощью методов БСП - примеры разработки
В данной статья я рассмотрю примеры использования выполнения функций и процедур в многопоточном режиме, используя возможности Библиотеки стандартных подсистем (БСП).
01.04.2022 3320 quazare 14
Полезные функции БСП Промо
Список часто востребованных, по моему мнению, функций из состава Библиотеки стандартных подсистем 2.2.
1 стартмани
01.02.2015 86566 52 spec8s 31
Необычное решение для хранения настроек внешней обработки
При написании внешней обработки, например для импорта данных из сторонней базы данных используя HTTP-сервисы, необходимо сохранять настройки соединения с HTTP. Подсказали оригинальный способ сохранения настроек с БД. При использовании "ХранилищеОбщихНастроек" все сильно зависит от прав пользователя. Чтобы читать настройки, сохраненные другим пользователем, необходимы права: "АдминистрированиеДанных". Как-то не хочется раздавать всем пользователям права администратора. Помогает БСП.
25.03.2022 961 AlexeyRaevsky 7
Получение контактной информации из отбора
Универсальная функция получения контактной информации из отбора компоновки данных. Весь код в статье.
25.03.2022 977 the1 0
Стандартные подсистемы БСП - параметры работы клиента и возможности диалогов
В данной небольшой статье рассмотрим обработку параметров работы клиента и режим диалога (выбора вопроса) модулей "стандартные подсистемы" БСП.
22.03.2022 3123 quazare 7
Полезный код для программистов 1С (часть 3). Подготовка печатных форм + подсистема Управление печатью (БСП)
Мы все любим 1С, не так ли? Вот дает 1С прекрасный механизм возможности модификации макетов печатных форм в БСП. А из всех рекомендаций это получение макета и заполнение параметров областей. И вы спросите: "А что не так. ты печатные формы накодить не можешь без указаний сверху?". Да вот в том то и дело, что я могу все. А вот пользователям от такого механизма пользы 0, если из всех доступных изменений остаются только шрифты, да текст произвольный накинуть. А ведь можно больше, надо только соблюдать несколько правил при подготовке печатных форм.
07.03.2022 3239 vandalsvq 0
Подключение подсистемы исправления документов и регистров в конфигурации ЗУП 3.1
Описание шагов для того, чтобы подключить разработанный документ к подсистеме исправления в конфигурации ЗУП 3.1.
1. Место коллекции "соответствие" среди других универсальных коллекций значений.
массив предназначен для доступа к элементам массива;
структура используется для хранения небольшого количества значений, каждое из которых имеет некоторое имя;
список значений - это не сохраняемый в базе данных объект, который позволяет строить динамические наборы значений и манипулировать ими;
таблица значений - почти тоже, что список, только еще с колонками.
А вот про соответствие в хелпе написано только что данный объект "Представляет доступ к соответствию".
Не собираюсь поправлять техписателей 1С - другого определения давать не буду.
С моей точки зрения, соответствие занимает промежуточное положение между структурой и массивом, с одной стороны, и списком и таблицей значений, с другой, объединяя хорошие черты этих коллекций.
Все коллекции хранят множества элементов. Структура позволяет получить нужный элемент по имени, массив - по номеру, список и таблица значений - поиском (отбором) среди других элементов. А соответствие позволяет выбрать или изменить нужный элемент по "ключу" этого элемента. При этом в качестве ключа может использоваться значение почти любого типа (например, ссылка). Возможность выбора и изменения по ключу дает возможность обрабатывать заранее неизвестное количество элементов, при этом никак их не нумеруя. Получаем практически таблицу значений, проиндексированную по колонке "ключ".
И вот тут, думаю, для многих будет сюрпризом, что доступ к элементу соответствия по ключу происходит почти со скоростью доступа к массиву или элементу структуры! - Как будто по номеру!
Будем подавать на вход обработки случайные числа в диапазоне от 1 до КоличествоРазличныхЭлементов. Обработка должна будет проверять каждое число, чтобы определить: не встречалось ли очередное число в текущей последовательности раньше. Если такого числа не было - оно добавляется в коллекцию, иначе - увеличивается число его повторений.
То есть оценивается время выполнения конструкции ". " в цикле (фиг1)
В качестве конструкции ". " используется:
Вариант 1. Массив (фиг2)
Вариант 2. Соответствие (фиг3)
Вариант 3. Индексированная ТаблицаЗначений (фиг4)
Результаты сравнения показали, что отметка в массиве занимает на тестовом компьютере 2,45 мкс, в соответствии - 7,06 мкс, в индексированной таблице значений - 15,06 мкс, причем это время не зависит от числа элементов в коллекции! Прилагаемый к статье отчет "БыстродействиеКоллекций" позволит Вам перепроверить эти результаты.
Скорость доступа к элементам соответствия и независимость скорости доступа от размера коллекции "соответствие" может удивлять, если не догадываться о ее устройстве. Можно предположить, что используется хеш-функция и хеш-таблица. Хеш-функция вычисляет номер строки хеш-таблицы, где лежит ссылка на элемент. Простая косвенная адресация! Одно лишнее (по сравнению с массивом) обращение к памяти!
При использовании для решения этой задачи списка значений, неиндексированной таблицы значений или добавления чисел в таблицу значений без контроля повторений с последующей сверткой, получаются существенно более плохие результаты. Которые, к тому же, зависят от размеров коллекций . При этом самые лучшие результаты среди аутсайдеров дает свертка.
В комментариях к статье также уже посоветовали отметить, что еще одна прелесть соответствия в том, что перед присваиванием Соответствие[Ключ] = Значение не нужна проверка на существование элемента с этим ключом, так как отсутствующий элемент в этом случае вставляется в соответствие. В приведенных примерах этому красивому приему, к сожалению, места не нашлось.
2. Пример использования соответствия в задаче подсчета повторений слов.
Приведем пример программы, подсчитывающей число повторений каждого слова в заданном тексте. Обычное решение - запоминание отдельных слов в строках таблицы значений и последующая свертка по полю "Слово". Соответствие ускоряет основную операцию в этом алгоритме минимум в два раза! При этом получается не только самый быстрый, но и выразительный код. Чтобы учесть, что слово, прочитанное в переменную "Слово" строкового типа, встретилось еще раз, используется наглядная запись: Частота[Слово] = Частота[Слово] + 1. Правда, чтобы определить, что символ является буквой, использовать соответствие будет уже неправильно: встроенная функция поиска подстроки работает быстрее!
Текст программы приведен на фиг5 и в приложенном к статье отчете "ЧастотаСлов", позволяющем проанализировать любой текстовый файл.
Прилагаемый к статье скриншот показывает результат определения частоты слов в данной статье.
3. Пример использования соответствия в задаче представления ориентированного графа.
Если стоит задача сохранить в оперативной памяти и проанализировать связи объектов информационной базы, то эффективной оказывается использование следующей структуры: Соответствие "Граф" хранит связи объекта, ссылка на который определяется ключом. Значением соответствия "Граф" является вложенное соответствие "Связи", которое для каждого связанного элемента хранит вес связи.
Например, если переменные "Элемент1" и "Элемент2" хранят ссылки на два элемента справочника "Номенклатура", причем второй входит в спецификацию первого с весом 2, то выражение
Граф[Элемент1][Элемент2] будет равно 2.
Если связи нет, то выражение Граф[Элемент1][Элемент2] будет равно "Неопределено".
Если нужно сделать вес связи равным 1, это сделает следующий код: Граф[Элемент1][Элемент2] = 1.
При этом Элемент1 и Элемент2 могут быть как ссылкой на справочник, так и ссылкой на документ и другие объекты. То есть так можно обрабатывать любые связи!
Стоит предупредить, что обращаться к элементам вложенного соответствия можно только, если во внешнем соответствии существует ключ первого элемента. Поэтому перед обращением к связям требуется проверка Граф[Элемент1] <> Неопределено.
На фиг6 приведен фрагмент кода программы, который производит чтение из базы данных в оперативную память связей номенклатуры, задаваемых в конфигурации "Бухгалтерия предприятия" в справочнике "СпецификацииНоменклатуры".
Заключительные замечания.
1. Ничего нового здесь не изобретено, просто делюсь опытом. Сам узнал о сравнительной эффективности коллекций из статьи Сергея Осипова. Спасибо ему!
2. Использование соответствия в решении задач позволяет исключить поиск при обработке заранее непронумерованных данных. Таким образом существенно ускоряется реализация многих базовых алгоритмов. Пользуйтесь соответствием в случаях, когда не нужен весь функционал таблиц значений!
3. Несмотря на ориентированность языка 1С на решение бизнес-задач, в нем есть место настоящему программированию - кодингу, в том числе и самому хитроумному. Поэтому изучайте теорию алгоритмов и программ, не мусорьте в коде и сможете сберечь нервы и время пользователей, строки кода, место на дисках, циклы процессора, электроэнергию. Делайте мир лучше!
Иногда встает вопрос, что лучше использовать, а чаще всего в стандартных конфигурациях 1С и их партнеров при обновлении может, происходит преобразование данных в другие объекты метаданных и почему то они строят структуру, где ключом является код объекта?! А там же может быть значение, которое начинается на цифру и сразу же выходит ошибка.
Таблица сравнения построена по версии справки из Конфигуратора:
Структура
Соответствие
Возможно обращение к значению элемента посредством оператора [. ]. В качестве аргумента передается значение ключа элемента.
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Представляет собой коллекцию пар КлючИЗначение . При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка.
К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.
Структура используется обычно для хранения небольшого количества значений, каждое из которым имеет некоторое имя.
Представляет доступ к соответствию.
Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен .
Имя типа XDTO: Structure
Имя типа XDTO: Map
Может использоваться в реквизитах управляемой формы.
Запись = Новый Структура ;
Запись = Новый Соответствие ;
Запись . Вставить ( "Ключ" , "Значение" );
Кроме этого: Структура упорядочивает элементы при добавлении, а соответсвие нет.
Вернемся к теме:
Для «Структура» ключ должен быть введен по всем правилам объявления переменных, а «Соответствие» нет.
Можно просто заменить тип переменной и заменить метод «Свойство» на «Получить». Обычно этого достаточно.
Но бывают и неожиданные результаты при использовании «Соответствие».
Например, платформа даёт добавить значение с ключом = Неопределенно, а вот считать нельзя, так как по факту запись не была добавлена, но и ошибку не выдал.
Предлагаю код для проверки исключительных ситуаций. Код можно добавить на пустой форме, добавив 2 таблицы значений с именами табСтруктура и табСоответствие .
Процедура КнопкаВыполнитьНажатие ( Кнопка )
Для А = 1 По 500000 Цикл
ВставитьИПроверить ( мСтруктура , Стр , Стр );
Сообщить ( "Структура - " + ( ТекущаяДата () - тДата ));
ВставитьИПроверить ( мСтруктура , Тест , Тест );
Для А = 1 По 500000 Цикл
ВставитьИПроверить ( мСоответствие , Стр , Стр );
Сообщить ( "Соответствие - " + ( ТекущаяДата () - тДата ));
ВставитьИПроверить ( мСоответствие , Тест , Тест );
Процедура ВставитьИПроверить ( Список , Ключ , Значение );
мТип = ТипЗнч ( Список );
//проверка возможно добавить или нет
Список . Вставить ( Ключ , Значение );
Сообщить ( "" + мТип + ": Не возможно добавить ключ [" + Значение + "]." );
Если НЕ (( мТип = Тип ( "Соответствие" ) И НЕ Список . Получить ( Ключ ) = Неопределено)
ИЛИ ( мТип = Тип ( "Структура" ) И НЕ Список . Свойство ( Ключ ) = Неопределено)) Тогда
Сообщить ( "" + мТип + ": Выполнено неявное преобразование типов и/или данных ключа [" + Значение + "]." )
Сообщить ( "" + мТип + ": Невозможно получить значение по ключу [" + Значение + "].
| Возможно было выполнено неявное преобразование типов и/или данных ключа." )
Процедура ОсновныеДействияФормыПроверка ( Кнопка )
мСсылка = Справочники . Валюты . ПустаяСсылка ();
// добавление новый элементов в Структуру
ВставитьИПроверить ( мСтруктура , "Ключ1" , "Ключ1" );
ВставитьИПроверить ( мСтруктура , "1Ключ" , "1Ключ" );
ВставитьИПроверить ( мСтруктура , мСсылка , "Справочники.Валюты.ПустаяСсылка()" );
ВставитьИПроверить ( мСтруктура , табСтруктура , "ТаблицаЗначений" );
ВставитьИПроверить ( мСтруктура , Неопределено, "Неопределено" );
ВставитьИПроверить ( мСтруктура , null, "null" );
// добавление новый элементов в Соответствие
ВставитьИПроверить ( мСоответствие , "Ключ1" , "Ключ1" );
ВставитьИПроверить ( мСоответствие , "1Ключ" , "1Ключ" );
ВставитьИПроверить ( мСоответствие , мСсылка , "Справочники.Валюты.ПустаяСсылка()" );
ВставитьИПроверить ( мСоответствие , табСоответствие , "ТаблицаЗначений" );
ВставитьИПроверить ( мСоответствие , Неопределено, "Неопределено" );
ВставитьИПроверить ( мСоответствие , null, "null" );
// выводим результат на форму
Для Каждого Стр Из мСтруктура Цикл
нСтр = табСтруктура . Добавить ();
нСтр . Ключ = Стр . Ключ ;
нСтр . Значение = Стр . Значение ;
ЭлементыФормы . табСтруктура . СоздатьКолонки ();
Для Каждого Стр Из мСоответствие Цикл
нСтр = табСоответствие . Добавить ();
нСтр . Ключ = Стр . Ключ ;
нСтр . Значение = Стр . Значение ;
ЭлементыФормы . табСоответствие . СоздатьКолонки ();
мСтруктура = Новый Структура ;
мСоответствие = Новый Соответствие ;
табСтруктура . Колонки . Добавить ( "Ключ" );
табСтруктура . Колонки . Добавить ( "Значение" );
табСоответствие . Колонки . Добавить ( "Ключ" );
табСоответствие . Колонки . Добавить ( "Значение" );
Структура : Не возможно добавить ключ [1Ключ].
Структура : Не возможно добавить ключ [Справочники.Валюты.ПустаяСсылка()].
Структура : Не возможно добавить ключ [Неопределено].
Структура : Не возможно добавить ключ [null].
Соответствие : Выполнено неявное преобразование типов и/или данных ключа [Неопределено].
Прошу обратить внимание: Что ТаблицаЗначений при добавлении в Структуру было преобразовано к строке "ТаблицаЗначений".
Последний раз у меня возникла такая ситуация при обновлении 1С:Консолидация ПРОФ с 1.3.3.7 (1.3.4.1) на 2.0.1.4 (2.0.2.6)
Строилась "Структура" по коду справочника "Операнды показателей".
Исправляется 1 строкой в Общих модулях.УправлениеОтчетами строка 3622.
"СтруктураПолей=Новый Структура;" заменить на "СтруктураПолей=Новый Соответствие;"
Специальные предложения
Последний раз у меня возникла такая ситуация при обновлении 1С:Консолидация ПРОФ с 1.3.3.7 (1.3.4.1) на 2.0.1.4 (2.0.2.6)
Строилась "Структура" по коду справочника "Операнды показателей".
Исправляется 1 строкой в Общих модулях.УправлениеОтчетами строка 3622.
"СтруктураПолей=Новый Структура;" заменить на "СтруктураПолей=Новый Соответствие;"
(1) Согласен c awk, это разные объекты с разным назначением.
(12) kereo, менять коды не вариант.
Так как на этих кодах справочника построены формулы расчета.
Но и это не самое страшное, видать для повышения скорости работы почти в каждом справочники, есть реквизит типа ХранилищеЗначения, которое в себе хранит копию почти всех реквизитов объекта + какие-то промежуточные расчеты.
Потом эти формулы используются в макетах, где они тоже берутся не из справочников, а из ХранилищеЗначения.
Возможно, где то еще есть ХранилищеЗначения на ХранилищеЗначения на ХранилищеЗначения, но дальше углубляться не стал.
Так как их надо будет обновлять. А это не просто, всё-таки это 1С: Консолидация.
(1)
вы непонятно что проверяете своим кодом. Лучше уберите его совсем.
В очередной раз доказали, что в ключ структуры ничего, кроме "правильной" строки, внести нельзя?
Доказали, что Соответствие может принимать любые ключи и любые значения?
И кому, кроме Вас, взбредет в голову давать ключу (ключу!) значение Неопределено (и Соответствие правильно ничего показывает - это же значение Непопределено) или Null?
Самое главное - что для получения значения Соответствия у запрашиваемого ключа должен быть обязательно тот же самый тип данных, что и при создании ключа - у автора ни слова (видимо, не знает).
Прошу обратить внимание: Что ТаблицаЗначений при добавлении в Структуру было преобразовано к строке "ТаблицаЗначений".
И никаких преобразований ни Структура, ни Соответствие не делают - разве что преобразуются в строковой ключ (Структура) таким образом:
где Ключ - строка, либо для Соответствия - по правилу преобразования 1С последовательности значений: все следующие значения - принимают тип данных (если это возможно) первого из слагаемых, иначе - ошибка.
ТаблицаЗначений как была ТЗ, так ей и остается. Разве что Вы сами себя там запутали, и превратили на каком-то этапе в строку (даже ковырять не хочется столь бестолковый код).
Так что лучше разберитесь по-настоящему, что и как, а пока статья - ни о чем, и никак никому не поможет, а только запутает.
Единственно верное замечание -
и то, упорядочивает не "значения", а строковые ключи, и, естественно, Соответствие не сможет никогда упорядочить ссылку на объект и число с Неопределено - т.е. все, что взбредет туда засунуть в Ключ.
Так что и по этому вопросу - у автора нет понятия.
Соответствие и структура очень близкие по сути коллекции.
Соответствие – это коллекция пар ключ и значение.
Структура – это коллекция пар ключ и значение.
Как видите, из определений объектов не отличишь структуру от соответствия, а разница между ними есть и находится в свойстве Ключ. Ключ в структуре может быть только строкой, а в соответствии может быть любым типом.
Что понимается под словом «Ключ»? Ключ – это ключевое поле которое не может иметь двух одинаковых значений - является уникальным в пределах коллекции. Т.е. если мы попытаемя в структуру имеющую ключ "Номенклатура" и значение "Диван" поместить такой же ключ, но с значением "Кресло", то программа просто заменит старое значение "Диван" на новое "Кресло", а не добавит ещё один ключ "Номенклатура" со значением "Кресло".
Основное использование объекта типа "Структура":
Этот объект часто используется в качестве способа передачи параметров в процедуры и функции.
Основное использование объекта типа "Соответствие":
Имя типа объекта оправдывает свое название, соответственно можно связывать два разных объекта системы, что позволяет избежать ипользования ТЗ с двумя колонками.
У этих объектов одинаковые методы для добавления и удаления элементов, но разные для получения.
У структуры имеется метод "Свойство" который проверяет есть ли такой ключ в коллекции и возвращает в переменную полученное значение. Если ключа нет, то возвращается Неопределено. При этом метод является функцией и возвращает Булево( Истина или Ложь )
В Соответствии для этого есть метод "Получить" в параметрах которого передается ключ парное значение которого мы ищем. Т.е. нет отдельной функции для проверки, но если ключ не найден, то возвращается Неопределено, что и можно использовать для этой же цели(текст изменен, благодаря замечаниям в комментариях).
Комментарии
Ольга, как я понимаю у Вас задача быстро сравнивать Списки значений, но соответствие здесь не поможет, т.к. программа при проверки уникальности ключа будет сравнивать не значения списка, а ссылку(указатель) на список. Если вы создадите два одинаковых списка значений и вставите их в соответствие, то программа их расположит как два разных ключа - 2 значения, но повторное добавление этих списков значений в соответствие не даст дублирования и количество значений так и останется 2.
Скажите, пожалуйста, как в ключ Соответствия засунуть список значений (массив), и потом искать этот ключ, сравнивая ключ как сам список значений, а не какой-то адрес (хэш). Какую структуру данных использовать для ключа?
Проблема в том, что каждый раз он видит массив, как новый, хотя его значения такие же, как в массиве уже существующего ключа Соответствия.
Не обязательно точно знать ключ соответствия.
Соответствие можно циклом Для каждого обойти, как и любую коллекцию.
И запросто узнать все ключи.
На счет точно знать есть ли у соответствия ключ, это да. Но добавьте чтобы было понятно (немного получается, что знать нужно и ошибиться нельзся, что в случае не нахождения по сути ключа, вернет Неопределно) поэтому это тоже свое рода проверка на наличие ;)
"Ключ в соответствии может быть только строкой, а в структуре может быть любым типом"
Наоборот, в структуре - строка, в соответствии - произвольный тип
Читайте также: