1С 8.3 Удаление дублей в массиве - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Удаление дублей в массиве

Данные > Примеры кода 1С > 1С 8.3 Массив
Удаление дублей в массиве в 1С 8.3/8.5:
// Функция возвращает новый массив, содержащий только уникальные элементы исходного массива.
// Порядок элементов в результирующем массиве не гарантируется (определяется внутренней реализацией множества).
// Если исходный массив не передан или пуст, возвращается пустой массив.
//
// Параметры:
//   ИсходныйМассив - Массив - массив с возможными повторяющимися значениями.
//
// Возвращаемое значение:
//   Массив - массив уникальных элементов.
//
Функция УникальныеЭлементы(ИсходныйМассив) Экспорт

   // Проверка на Неопределено или пустой массив
   Если ИсходныйМассив = Неопределено Или ИсходныйМассив.Количество() = 0 Тогда
       Возврат Новый Массив;
   КонецЕсли;

   // Создаём множество из массива — дубликаты автоматически удаляются
   Множество = Новый Множество(ИсходныйМассив);

   // Преобразуем множество обратно в массив
   Результат = Множество.ВМассив();

   Возврат Результат;

КонецФункции

// Пример использования:
ИсходныйМассив = Новый Массив;
ИсходныйМассив.Добавить("яблоко");
ИсходныйМассив.Добавить("груша");
ИсходныйМассив.Добавить("яблоко");
ИсходныйМассив.Добавить("слива");

Уникальные = УникальныеЭлементы(ИсходныйМассив);
// Результат: ["яблоко", "груша", "слива"] (порядок может отличаться)
  • Функция работает с любыми типами данных, поддерживающими сравнение (числа, строки, даты, ссылки и т.д.).
  • Если важен исходный порядок элементов, можно реализовать алгоритм с использованием вспомогательного соответствия, но тогда код станет сложнее. В большинстве случаев достаточно компактного решения через Множество.
Ещё примеры:
Удаление дублей в массиве с помощью ТЗ в 1С 8.3:
Функция УдалениеДублейВМассиве1(ВходящийМассив) Экспорт

   ТЗ_Ключ = Новый ТаблицаЗначений;
   ТЗ_Ключ.Колонки.Добавить("Инд"); // ключ поиска дублей

   Для A=1 По ВходящийМассив.Количество() Цикл
       ТЗ_Ключ.Добавить();
   КонецЦикла;

   ТЗ_Ключ.ЗагрузитьКолонку(ВходящийМассив,"Инд");
   ТЗ_Ключ.Свернуть("Инд");
   ВходящийМассив = ТЗ_Ключ.ВыгрузитьКолонку("Инд");

   Возврат ВходящийМассив;

КонецФункции
Удаление дублей в массиве с помощью ТЗ в 1С 8.3:
Функция УдалениеДублейВМассиве1(ВходящийМассив) Экспорт

   ТЗ_Ключ = Новый ТаблицаЗначений;
   ТЗ_Ключ.Колонки.Добавить("Инд"); // ключ поиска дублей

   Для A=1 По ВходящийМассив.Количество() Цикл
       ТЗ_Ключ.Добавить();
   КонецЦикла;

   ТЗ_Ключ.ЗагрузитьКолонку(ВходящийМассив,"Инд");
   ТЗ_Ключ.Свернуть("Инд");
   ВходящийМассив = ТЗ_Ключ.ВыгрузитьКолонку("Инд");

   Возврат ВходящийМассив;

КонецФункции
Удаление дублей в массиве в цикле в 1С 8.3:
Функция УдалениеДублейВМассиве2(ВходящийМассив) Экспорт

   ТекИндекс = 0;

   МассивКоличество = ВходящийМассив.Количество();
   Пока ТекИндекс < МассивКоличество Цикл
       ТекИндекс2 = ТекИндекс + 1;
       Пока ТекИндекс2 < МассивКоличество Цикл
           Если ВходящийМассив[ТекИндекс2] = ВходящийМассив[ТекИндекс] Тогда
               ВходящийМассив.Удалить(ТекИндекс2);
               МассивКоличество = МассивКоличество - 1;
           Иначе
               ТекИндекс2 = ТекИндекс2 + 1;
           КонецЕсли;
       КонецЦикла;
       ТекИндекс = ТекИндекс + 1;
   КонецЦикла;

   Возврат ВходящийМассив;

КонецФункции
Удаление дублей в массиве через БСП в 1С 8.3:
ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(ВходящийМассив);
Удаление дублей в массиве через БСП в 1С 8.3:
Взаимодействия.УдалитьПовторяющиесяЭлементыМассива(МассивСпособовОтражений);
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 10.07.2023
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Назад к содержимому