1С 8.3 Удаление дублей в массиве
Данные > Примеры кода 1С > 1С 8.3 Массив
Перейти в раздел примеры кода 1С 8.3:
Удаление дублей в массиве в 1С 8.3/8.5:
// Функция возвращает новый массив, содержащий только уникальные элементы исходного массива.
// Порядок элементов в результирующем массиве не гарантируется (определяется внутренней реализацией множества).
// Если исходный массив не передан или пуст, возвращается пустой массив.
//
// Параметры:
// ИсходныйМассив - Массив - массив с возможными повторяющимися значениями.
//
// Возвращаемое значение:
// Массив - массив уникальных элементов.
//
Функция УникальныеЭлементы(ИсходныйМассив) Экспорт
// Проверка на Неопределено или пустой массив
Если ИсходныйМассив = Неопределено Или ИсходныйМассив.Количество() = 0 Тогда
Возврат Новый Массив;
КонецЕсли;
// Создаём множество из массива — дубликаты автоматически удаляются
Множество = Новый Множество(ИсходныйМассив);
// Преобразуем множество обратно в массив
Результат = Множество.ВМассив();
Возврат Результат;
КонецФункции
// Порядок элементов в результирующем массиве не гарантируется (определяется внутренней реализацией множества).
// Если исходный массив не передан или пуст, возвращается пустой массив.
//
// Параметры:
// ИсходныйМассив - Массив - массив с возможными повторяющимися значениями.
//
// Возвращаемое значение:
// Массив - массив уникальных элементов.
//
Функция УникальныеЭлементы(ИсходныйМассив) Экспорт
// Проверка на Неопределено или пустой массив
Если ИсходныйМассив = Неопределено Или ИсходныйМассив.Количество() = 0 Тогда
Возврат Новый Массив;
КонецЕсли;
// Создаём множество из массива — дубликаты автоматически удаляются
Множество = Новый Множество(ИсходныйМассив);
// Преобразуем множество обратно в массив
Результат = Множество.ВМассив();
Возврат Результат;
КонецФункции
// Пример использования:
ИсходныйМассив = Новый Массив;
ИсходныйМассив.Добавить("яблоко");
ИсходныйМассив.Добавить("груша");
ИсходныйМассив.Добавить("яблоко");
ИсходныйМассив.Добавить("слива");
Уникальные = УникальныеЭлементы(ИсходныйМассив);
ИсходныйМассив.Добавить("яблоко");
ИсходныйМассив.Добавить("груша");
ИсходныйМассив.Добавить("яблоко");
ИсходныйМассив.Добавить("слива");
Уникальные = УникальныеЭлементы(ИсходныйМассив);
// Результат: ["яблоко", "груша", "слива"] (порядок может отличаться)
- Функция работает с любыми типами данных, поддерживающими сравнение (числа, строки, даты, ссылки и т.д.).
- Если важен исходный порядок элементов, можно реализовать алгоритм с использованием вспомогательного соответствия, но тогда код станет сложнее. В большинстве случаев достаточно компактного решения через Множество.
Ещё примеры:
Удаление дублей в массиве с помощью ТЗ в 1С 8.3:
Функция УдалениеДублейВМассиве1(ВходящийМассив) Экспорт
ТЗ_Ключ = Новый ТаблицаЗначений;
ТЗ_Ключ.Колонки.Добавить("Инд"); // ключ поиска дублей
Для A=1 По ВходящийМассив.Количество() Цикл
ТЗ_Ключ.Добавить();
КонецЦикла;
ТЗ_Ключ.ЗагрузитьКолонку(ВходящийМассив,"Инд");
ТЗ_Ключ.Свернуть("Инд");
ВходящийМассив = ТЗ_Ключ.ВыгрузитьКолонку("Инд");
Возврат ВходящийМассив;
КонецФункции
ТЗ_Ключ = Новый ТаблицаЗначений;
ТЗ_Ключ.Колонки.Добавить("Инд"); // ключ поиска дублей
Для A=1 По ВходящийМассив.Количество() Цикл
ТЗ_Ключ.Добавить();
КонецЦикла;
ТЗ_Ключ.ЗагрузитьКолонку(ВходящийМассив,"Инд");
ТЗ_Ключ.Свернуть("Инд");
ВходящийМассив = ТЗ_Ключ.ВыгрузитьКолонку("Инд");
Возврат ВходящийМассив;
КонецФункции
Удаление дублей в массиве с помощью ТЗ в 1С 8.3:
Функция УдалениеДублейВМассиве1(ВходящийМассив) Экспорт
ТЗ_Ключ = Новый ТаблицаЗначений;
ТЗ_Ключ.Колонки.Добавить("Инд"); // ключ поиска дублей
Для A=1 По ВходящийМассив.Количество() Цикл
ТЗ_Ключ.Добавить();
КонецЦикла;
ТЗ_Ключ.ЗагрузитьКолонку(ВходящийМассив,"Инд");
ТЗ_Ключ.Свернуть("Инд");
ВходящийМассив = ТЗ_Ключ.ВыгрузитьКолонку("Инд");
Возврат ВходящийМассив;
КонецФункции
ТЗ_Ключ = Новый ТаблицаЗначений;
ТЗ_Ключ.Колонки.Добавить("Инд"); // ключ поиска дублей
Для A=1 По ВходящийМассив.Количество() Цикл
ТЗ_Ключ.Добавить();
КонецЦикла;
ТЗ_Ключ.ЗагрузитьКолонку(ВходящийМассив,"Инд");
ТЗ_Ключ.Свернуть("Инд");
ВходящийМассив = ТЗ_Ключ.ВыгрузитьКолонку("Инд");
Возврат ВходящийМассив;
КонецФункции
Удаление дублей в массиве в цикле в 1С 8.3:
Функция УдалениеДублейВМассиве2(ВходящийМассив) Экспорт
ТекИндекс = 0;
МассивКоличество = ВходящийМассив.Количество();
Пока ТекИндекс < МассивКоличество Цикл
ТекИндекс2 = ТекИндекс + 1;
Пока ТекИндекс2 < МассивКоличество Цикл
Если ВходящийМассив[ТекИндекс2] = ВходящийМассив[ТекИндекс] Тогда
ВходящийМассив.Удалить(ТекИндекс2);
МассивКоличество = МассивКоличество - 1;
Иначе
ТекИндекс2 = ТекИндекс2 + 1;
КонецЕсли;
КонецЦикла;
ТекИндекс = ТекИндекс + 1;
КонецЦикла;
Возврат ВходящийМассив;
КонецФункции
ТекИндекс = 0;
МассивКоличество = ВходящийМассив.Количество();
Пока ТекИндекс < МассивКоличество Цикл
ТекИндекс2 = ТекИндекс + 1;
Пока ТекИндекс2 < МассивКоличество Цикл
Если ВходящийМассив[ТекИндекс2] = ВходящийМассив[ТекИндекс] Тогда
ВходящийМассив.Удалить(ТекИндекс2);
МассивКоличество = МассивКоличество - 1;
Иначе
ТекИндекс2 = ТекИндекс2 + 1;
КонецЕсли;
КонецЦикла;
ТекИндекс = ТекИндекс + 1;
КонецЦикла;
Возврат ВходящийМассив;
КонецФункции
Удаление дублей в массиве через БСП в 1С 8.3:
ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(ВходящийМассив);
Удаление дублей в массиве через БСП в 1С 8.3:
Взаимодействия.УдалитьПовторяющиесяЭлементыМассива(МассивСпособовОтражений);
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник