Помогите свернуть массив (убрать дублирующиеся строки)
Подскажите, есть массив (МС) с задублированными записями. Ниже код, которым я пытаюсь убрать дубли, но код не срабатывает: СвернутыйМассив всё равно содержит задублированные записи. Помогите.
МС = Новый Массив;
Пока ТЗ_Сотрудники.следующий() Цикл
МС.Добавить(новый Структура("Подразделение, Сотрудник", ТЗ_Сотрудники.Подразделение, ТЗ_Сотрудники.Сотрудник)); //здесь задублированные сотрудники, подразделение всегда одинаковое
//добавим вспомогательный массив
СвернутыйМассив = Новый Массив;
Для каждого Элемент Из МС Цикл
Если СвернутыйМассив.Найти(Элемент.Сотрудник) = Неопределено Тогда
//если такого значения в массиве еще нет, добавим его
СвернутыйМассив.Добавить(новый Структура("Подразделение, Сотрудник", Элемент.Подразделение, Элемент.Сотрудник));
Структ = Новый Структура("Сотрудники, Факторы", СвернутыйМассив, МФ);
Как свернуть массив?
Замысел таков: будем перебирать элементы исходного массива и переносить их во вспомогательный массив, контролируя уникальность элементов. Для этого мы воспользуемся методом Массив.Найти():
Б. Свертка элементов массива через таблицу значений
Замысел этого решения заключается в использовании вспомогательной таблицы с одной единственной колонкой произвольного типа. Далее, используя метод ТаблицаЗначений.Свернуть(), мы получим набор уникальных значений, которые в дальнейшем сможем отсортировать и выгрузить обратно в исходный массив.
PS: Последнее решение мне кажется более интересным за счет использования более эффективного кода.
Комментарии
Через таблицу значений работает быстрее.
Сделал массив 200 тысяч элементов 1,1,2,2,3,4….и так далее
первый способ 273 секунды, второй 1.7 секунд.
Спасибо за опыт! Оно и понятно: поиск в массиве заключается в полным последовательным переборе всех элементов и время выполнения напрямую зависит от числа уникальных элементов. Свертка через таблицу работает быстрее, т.к. метод реализован на уровне платформы, а не исполняется транслятором…
1С 8.3 Свернуть массив — Программист 1С Минск. Автоматизация бизнеса.

Для Каждого ЭлементМ Из МассивДляСвертки Цикл
Если МассивДополнительный . Найти ( ЭлементМ ) = Неопределено Тогда
//Если значения еще нет, то добавим его
МассивДополнительный . Добавить ( ЭлементМ );
КонецЕсли;
КонецЦикла;
Сообщить ( СтрСоединить ( МассивДополнительный , «,» ));
// 2, 4, 7
Процедура Свертка_Массива_через_ТаблицуЗначений () Экспорт
МассивДляСвертки = Новый Массив ;
МассивДляСвертки . Добавить ( 2 );
МассивДляСвертки . Добавить ( 4 );
МассивДляСвертки . Добавить ( 7 ); // Массив: (2, 4, 7)
ТЗ = Новый ТаблицаЗначений ;
ТЗ . Колонки . Добавить ( «ВыгружаемоеЗначение» );
// Заполняем строки ТЗ (по количеству элементов массива)
Для А = 0 По МассивДляСвертки . ВГраница () Цикл
ТЗ . Добавить ();
КонецЦикла;
// Загружаем Массив в ТЗ и сворачиваем его
ТЗ . ЗагрузитьКолонку ( МассивДляСвертки , «ВыгружаемоеЗначение» );
ТЗ . Свернуть ( «ВыгружаемоеЗначение» );
// Если нужно — сортируем
//ТЗ.Сортировать(«ВыгружаемоеЗначение»);
// Выгружаем ТЗ в Массив
МассивДляСвертки = ТЗ . ВыгрузитьКолонку ( «ВыгружаемоеЗначение» );