Имя: Пароль:
1C
1С v8
Алгоритм удаления строк коллекции по условию
0 prog1Csww
 
29.11.19
06:58
Алгоритм удаления строк коллекции по условию
Знаю что более быстрый это начинать с конца
К = Массив.Количество()
Для Сч = К По 1 Цикл
    Если УдовлетворяетУсловию(Элемент[Сч].Значение) = Истина Тогда
         Массив.Удалить(Сч);
    КонецЕсли;
КонецЦикла; (это не 1С язык)
Также там какой то нюанс, что если элементы в коллекции сами сдвигается при удалении, то можно и с начала начинать.
Как это называется?

Кто догадались что с конца быстрее? Интуитивно?
Или как-то связано с вычислением времени алгоритма?
Из доступных лекций про это знаю только
https://www.lektorium.tv/course/22823
https://www.lektorium.tv/course/22843
Смотреть некогда. Может кто смотрел или изучал, есть это в лекциях?
Хотя бы да\нет?...
1 Индиго
 
29.11.19
07:04
всегда пользуюсь такой схемой:

//--
мУд=Новый Массив;
Для каждого Эл из Коллекция Цикл
   Если Удовлетворяет(Эл) Тогда
       мУд.Добавить(Эл);
   КонецЕсли;
Конеццикла;

Для Каждого Эл Из мУд Цикл
     Коллекция.Удалить(Эл);
Конеццикла;
2 Admin_Net_1C
 
29.11.19
08:54
(0) обход коллекции от последнего элемента к первому с удалением не нужных
3 Сияющий в темноте
 
29.11.19
08:57
если мы не используем оператор для каждого,то можно и сначала обходить,просто,при удалении не забывать уменьшить количество и индекс на единицу.
4 ice777
 
29.11.19
08:59
(3) "итератор", хотел сказать?
5 Simod
 
29.11.19
09:06
Можно и прямым перебором, и обратным. Использовать "Для Каждого.." при непосредственном удалении не получиться, т.к. сбивается выборка. Но можно использовать способ переноса отобранных значений в другую коллекцию - http://catalog.mista.ru/public/788007/#69.%20Быстрое%20удаление%20строк%20в%20таблице%20значений
6 Конструктор1С
 
29.11.19
09:10
Господа, вы занимаетесь оптимизацией там, где она не требуется
7 СвинТуз
 
29.11.19
09:28
СтруктураОтбора = Новый Структура;
Строки = .НайтиСтроки(СтруктураОтбора);
8 СвинТуз
 
29.11.19
09:29
Оно того не стоит