Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
19 окт 2021, 12:30

Как правильно найти одинаковые значения и удалить из массива

Автор Alex345, 16 авг 2021, 09:41

0 Пользователей и 1 гость просматривают эту тему.

Alex345

Всем привет, подскажите как-то туплю, знаю что можно удалить дублирующие значения через двойной цикл. Наверняка есть какой-то даже метод позволяющий не делать этого через двойной цикл.

Вот как выглядит мой объект. Например, в нем есть дублирующие значения Валетов Ринат Ильдарович - Лабмет, где 7 индексом его по правилам я хочу удалить.


Я написал структуру кода, но он у меня не до конца реализован правильно.

Сч2 = 1;
Для Сч = 0 По Объект.Клиенты.Количество()-1 Цикл
Для Сч = Сч2 По Объект.Клиенты.Количество()-1 Цикл
Если Объект.Клиенты[Сч].Менеджер = Объект.Клиенты[Сч2].Менеджер И Объект.Клиенты[Сч].Клиент = Объект.Клиенты[Сч2].Клиент Тогда
Объект.Клиенты.Удалить(Сч);
КонецЕсли;
КонецЦикла;
Сч2 = Сч2 + 1;
КонецЦикла;


По идеи мой цикл должен проходить так, но в момент удаления могут возникнуть проблемы, так как индексация нарушится, после удаления элемента

0 - 1,2.3.4.5.6.7.8
1 - 2,3,4,5,6,7,8
2 - 3,4,5,6,7,8
3 - 4,5,6,7,8
4 - 5,6,7,8
5 - 6,7,8
6 - 7, 8
7 - 8

antoneus

Цитата: Alex345 от 16 авг 2021, 09:41Наверняка есть какой-то даже метод позволяющий не делать этого через двойной цикл.

Метод Свернуть, например?

Alex345

@antoneus, Но он же для строк таблицы вроде. А у меня же это объект

antoneus

У "объекта" есть метод Выгрузить, который возвращает ТЗ. А еще есть метод Загрузить.

LexaK

@Alex345, что бы не сбивался индекс, можно/нужно обходить таблицу с последней строки,
вот вариант удаления дублей за один цикл,
//общее количество строк
лкПоз = Объект.Клиенты.Количество();
//массив для проверки совпадаений
лкДанные = Новый Массив;
Пока лкПоз > 0 Цикл
лкПоз = лкПоз - 1;
лкКлюч = "" + Объект.Клиенты[лкПоз].Менеджер + "--" + Объект.Клиенты[лкПоз].Клиент;
Если лкДанные.Найти(лкКлюч) = Неопределено Тогда
//таких данных еще не было, добавляем
лкДанные.Добавить(лкКлюч);
Иначе
//уже были такие данные, удаляем строку
Объект.Клиенты.Удалить(лкПоз);
КонецЕсли;
КонецЦикла;
ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск