1с статьи | Курс-репетитор программиста 1С
Соответствие

Создание и наполнение

// создали соответствие без ключей
Соответствие = Новый Соответствие();

// добавили ключ - значение
Соответствие.Вставить("Фамилия", "Еникеев");
Соответствие.Вставить("Имя", "Марат");
Соответствие.Вставить("Отчество", "Артурович");
Соответствие.Вставить(0, ТекущаяДата());

// возможно получение через []                  
// если ключ не найден - получим исключение
Имя = Соответствие["Имя"];              

// оптимально получение через метод Получить
Отчество = Соответствие.Получить("Отчество");

// т.к. если ключа нет, то вернется Неопределено
Значение = Соответствие.Получить(1);
Если Значение = Неопределено Тогда
   Соответствие.Вставить(1, 1000);
КонецЕсли;

Если Соответствие.Количество() Тогда
   // соответствие содержит ключи
КонецЕсли;

Фамилия = Соответствие.Фамилия;

// Почему возникла ошибка
// "Поле объекта не обнаружено (Фамилия)"?

Показать решение

Обход и изменение

// создали соответствие без ключей
Соответствие = Новый Соответствие();

// добавили ключ - значение
Соответствие.Вставить("Фамилия", "Еникеев");
Соответствие.Вставить("Имя", "Марат");
Соответствие.Вставить(10, "Артурович");
Соответствие.Вставить(0, '20230101');
Соответствие.Вставить(1, "новое значение");

// обход осуществляется в порядке
// сортировки по внутреннему ключу
Для Каждого Элемент Из Соответствие Цикл
   // Элемент имеет тип КлючИЗначение 
   ТекстСообщения = СтрШаблон("ключ %1, значение %2", 
      Элемент.Ключ, Элемент.Значение);
   Сообщить(ТекстСообщения);
КонецЦикла; 

// Что будет выведено?

Показать решение

Количество уникальных значений в массиве

Массив = Новый Массив;
// сформируем массив из 100 элементов
// со значениями из диапазона [0,10]
ГСЧ = Новый ГенераторСлучайныхЧисел();           
РазмерМассива = 100;  
Для Индекс = 1 По РазмерМассива Цикл
   Массив.Добавить(ГСЧ.СлучайноеЧисло(0, 10));
КонецЦикла; 

// подсчитаем количество одинаковых 
// элементов массива

// создали соответствие без ключей
// ключом будет значение массива
// значением - количество элементов в массиве
Кэш = Новый Соответствие();

// обходим массив
Для Каждого Элемент Из Массив Цикл
   // получаем значение массива в кэше
   Значение = Кэш.Получить(Элемент);
   Если Значение = Неопределено Тогда
      // если его ещё нет, то
      // добавляем со значением 1
      Кэш.Вставить(Элемент, 1);
   Иначе
      // увеличиваем значение ключа на 1
      Кэш.Вставить(Элемент, Значение + 1);
   КонецЕсли;
КонецЦикла;

// сообщаем результат
Для Каждого Элемент Из Кэш Цикл
   // Элемент имеет тип КлючИЗначение 
   ТекстСообщения = СтрШаблон("значение %1, количество элементов: %2", 
      Элемент.Ключ, Элемент.Значение);
   Сообщить(ТекстСообщения);
КонецЦикла; 

// Значения массива будут выведены в порядке возрастания?

Показать решение

Слишком маленькое разрешение экрана.