Как правильно удалять несколько элементов из TStringList, TObjectList и вообще из списков?
1 2 3 4 5 |
for i := 0 to SomeStringList.Count - 1 do begin if SomeStringList[i] = 'SomeValue' then // some condition here SomeStringList.Delete(i); end; |
И вот такой способ ошибочен так как постоянно меняется Count и индексы элементов, пробовал через repeat и while, но там похожая ситуация. Как вариант проходить одним циклом, копировать элементы в другой StringList, потом искать их методом IndexOf, но это только если элементы уникальны. Либо запоминать адреса переменных, это уже будет работать для всех переменных, но это, блин как-то синхрофазотронно)))
В общем, чувствую, простая задача, а выхода пока не вижу.
Обратился я на форум и там мне помогли. А решение-то было 1 одну строку.
1 |
for i := SomeStringList.Count-1 downto 0 do |
И ещё один вариант через цикл while
1 2 3 4 5 6 7 8 |
I := 0; While i < SL.Count do Begin If условие then SL.delete(I) Else Inc(I); End; |