Соответствие — это универсальная коллекция. Элементами коллекции являются объекты типа КлючИЗначение. При этом и ключ и значение соответствия могут быть любого типа (в отличии от структуры, где ключ может быть только строкой). Соответствие может быть передано с клиента на сервер, и с сервера на клиент. Соответствие удобно использовать для быстрого поиска значения по ключу. Время поиска в соответствии константное и не зависит от количества элементов в соответствии (в отличии от массива, где значение ищется перебором, и чем больше элементов в массиве, тем медленнее ищется значение).
- Создание соответствия
- Методы для работы с соответствием
- Обращение к ключам соответствия
- Перебор соответствия
- Примеры работы с соответствием
- Как добавить новое значение в соответствие
- Какой тип данных может быть у ключа соответствия
- Как получить значение соответствия по ключу
- Как изменить значение ключа соответствия
- Как удалить ключ из соответствия
- Как узнать есть ли в соответствии определенный ключ
- Как получить количество элементов соответствия
- Как удалить все элементы соответствия
- Как скопировать соответствие
- Как преобразовать соответствие в структуру
- Фиксированное соответствие
Создание соответствия
Для создания соответствия используется следующий конструктор:
1 2 |
//пустое соответствие ПараметрыОбработки = Новый Соответствие; |
В результате будет создано пустое соответствие.
Методы для работы с соответствием
- Вставить(<Ключ>, <Значение>) — добавляет новое значение в соответствие, если уже есть значение с таким ключом, то оно будет заменено. Также вставить новое значение можно через квадратные скобки: ПараметрыОбработки[«Ключ»] = 1;
- Получить(<Ключ>) — получает значение соответствия по ключу. Вернет Неопределено, если нет такого ключа. Можно через квадратные скобки: Значение = ПараметрыОбработки[«Ключ»];
- Удалить(<Ключ>) — удаляет элемент соответствия по ключу.
- Очистить() — удаляет все элементы соответствия
- Количество() — вернет количество элементов соответствия
Обращение к ключам соответствия
К ключам соответствия удобно обращаться через квадратные скобки. Если в соответствии нет такого ключа и попытаться получить его, то ошибки не будет (вернет Неопределено). Если попытаться изменить значение, то если такого ключа еще не было, то значение будет добавлено в соответствие. Если такой ключ уже есть — значение будет заменено.
1 2 3 4 5 |
ПараметрыОбработки = Новый Соответствие; Значение = ПараметрыОбработки["Ключ1"]; //Значение = неопределено ПараметрыОбработки["Ключ1"] = 1; Значение = ПараметрыОбработки["Ключ1"]; //Значение = 1 ПараметрыОбработки["Ключ1"] = Ложь; //теперь Значение = Ложь |
Перебор соответствия
Перебрать соответствие можно через цикл Для Каждого. На каждой итерации будет получена пара ключ и значение. При этом элементы коллекции получаются в произвольном порядке.
1 2 3 4 |
Для Каждого КлючИЗначение Из ПараметрыОбработки Цикл Сообщить(КлючИЗначение.Ключ); Сообщить(КлючИЗначение.Значение); КонецЦикла; |
Примеры работы с соответствием
Как добавить новое значение в соответствие
1 2 3 4 |
ПараметрыОбработки = Новый Соответствие; ПараметрыОбработки["Ключ1"] = 1; //можно так ПараметрыОбработки.Вставить("Ключ2", 2); |
Какой тип данных может быть у ключа соответствия
1 2 3 4 5 6 7 8 |
//тип ключа может быть произвольным ПараметрыОбработки = Новый Соответствие; ПараметрыОбработки["Ключ1"] = 1; //строка ПараметрыОбработки[2] = 2; //число ПараметрыОбработки[Истина] = Истина; //булево Ссылка = ПредопределенноеЗначение("Справочник.Номенклатура.Товар"); ПараметрыОбработки[Ссылка]= "Ссылка"; //ссылка //и т.д. |
Как получить значение соответствия по ключу
1 2 |
Значение1 = ПараметрыОбработки["Ключ1"]; Значение2 = ПараметрыОбработки.Получить("Ключ2"); |
Как изменить значение ключа соответствия
1 2 3 4 5 |
ПараметрыОбработки = Новый Соответствие; ПараметрыОбработки["Ключ1"] = 1; ПараметрыОбработки["Ключ1"] = 2; //можно и так ПараметрыОбработки.Вставить("Ключ1", 3); |
Как удалить ключ из соответствия
1 |
ПараметрыОбработки.Удалить("Ключ1"); |
Как узнать есть ли в соответствии определенный ключ
1 2 3 4 |
ЕстьКлюч = ПараметрыОбработки["Ключ1"] <> Неопределено; //Если в соответствии есть ключ "Ключ1", то //переменная ЕстьКлюч будет равна Истина //Иначе Ложь |
Как получить количество элементов соответствия
1 |
Колво = ПараметрыОбработки.Количество(); |
Как удалить все элементы соответствия
1 |
ПараметрыОбработки.Очистить(); |
Как скопировать соответствие
1 |
Копия = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ПараметрыОбработки)); |
Как преобразовать соответствие в структуру
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
ПараметрыОбработки = Новый Соответствие; ПараметрыОбработки.Вставить("Ключ1", 1); ПараметрыОбработки.Вставить("Ключ2", 2); ПараметрыОбработки.Вставить(1234, 5678); ПараметрыОбработки.Вставить(Истина, Ложь); Ссылка = ПредопределенноеЗначение("Справочник.Номенклатура.Товар"); ПараметрыОбработки.Вставить(Ссылка, "Ссылка"); Стр = Новый Структура; Для Каждого КлючИЗначение Из ПараметрыОбработки Цикл //в попытке пробуем преобразовать ключ соответствия в строку Попытка //так как ключ структуры не может начинаться с числа, то для //чисел добавляем в начале нижнее подчеркивание Если ТипЗнч(КлючИЗначение.Ключ) = Тип("Число") Тогда Префикс = "_"; Иначе Префикс = ""; КонецЕсли; //через Формат удаляем возможные неразрывные пробелы КлючСтруктуры = Префикс + Формат(КлючИЗначение.Ключ, "ЧГ=0"); Стр.Вставить(КлючСтруктуры, КлючИЗначение.Значение); Исключение //здесь можно что-то дополнительно сделать с необработанными ключами Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; |
Фиксированное соответствие
Фиксированное соответствие создается только на основании обычного соответствия. После его создания нельзя изменить ни ключ, ни значение существующих элементов. Также нельзя добавить новые элементы в соответствие.
1 2 3 4 5 6 7 8 |
ПараметрыОбработки = Новый Соответствие; ПараметрыОбработки["Ключ1"] = 1; ПараметрыОбработки["Ключ2"] = 2; ФиксПараметры = Новый ФиксированноеСоответствие(ПараметрыОбработки); //В соответствии ФиксПараметры будет 2 ключа: //Ключ1 = 1 //Ключ2 = 2 |
На основании фиксированного соответствия можно создать обычное соответствие:
1 2 3 4 |
//фиксированное ФиксПараметры = Новый ФиксированноеСоответствие(ПараметрыОбработки); //обычное с теми же ключами и значения, что и фиксированное ОбычноеСоответствие = Новый Соответствие(ФиксПараметры); |
Если через квадратные скобки обратиться к ключу фиксированного соответствия, которого в нем нет, то будет вызвано исключение:
1 2 3 4 5 6 7 8 9 |
ПараметрыОбработки = Новый Соответствие; ПараметрыОбработки["Ключ1"] = 1; ПараметрыОбработки["Ключ2"] = 2; //фиксированное ФиксПараметры = Новый ФиксированноеСоответствие(ПараметрыОбработки); Значение1 = ФиксПараметры["Ключ1"]; //все хорошо Значение3 = ФиксПараметры["Ключ3"]; //ошибка! //хотя в обычном соответствии просто вернуло бы Неопределено |
У фиксированного соответствия есть только 2 метода:
- Количество()
- Получить(<Ключ>)
Через метод Получить() можно обращаться к несуществующему ключу фиксированного соответствия. В этом случае метод, как и для обычного соответствия, вернет Неопределено.