Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
GringoV
15 / 15 / 1
Регистрация: 29.11.2014
Сообщений: 223
#1

Как правильно удалять несколько элементов из TStringList, TObjectList и вообще из списков? - Delphi

22.11.2016, 12:45. Просмотров 303. Ответов 7
Метки нет (Все метки)

Вот чувствую есть какое-то простое решение, но не вижу, народ, дайте взгляд со стороны. Итак

http://www.cyberforum.ru/delphi-beginners/thread1252844.html
Delphi
1
2
3
4
5
6
7
8
for i:=0 to SomeStringList.Count-1 do begin
 
if SomeStringList[i]='SomeValue' // some condition here
   then
       SomeStringList.Delete(i);
 
 
end;
И вот такой алгоритмик ошибочен так как постоянно меняется Count, пробовал через repeat и while, но там похожая ситуация. Как вариант проходить одним циклом, копировать элементы в другой StringList, потом искать их методом IndexOf, но это только если элементы уникальны. Либо запоминать адреса переменных, это уже будет работать для всех переменных, но это, блин как-то синхрофазотронно)))
В общем, чувствую, простая задача, а выхода пока не вижу))
Всем заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2016, 12:45
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как правильно удалять несколько элементов из TStringList, TObjectList и вообще из списков? (Delphi):

Как загрузить несколько файлов в Tstringlist через OpenDialog
Всем привет) как загрузить 10-20 Text файлов в Tstringlist через OpenDialog...

Как правильно создавать и удалять формы?
Привет. Использую такую конструкцию для создания формы: if(not...

Неясности с TStringList. Как найти наибольший элемент в TStringList?
Добрый день. Проблема следующая: мне надо в TStringList найти самую длинную...

Можно ли в TObjectList добавлять TObjectList-ы?
Подскажите в TObjectList можно добовлть TObjectList-ы

Как правильно наследовать несколько элементов
Вот код: #region Directives using System; using System.Drawing; using...

7
FaTaL-CS
69 / 69 / 23
Регистрация: 14.10.2013
Сообщений: 527
22.11.2016, 12:57 #2
При удалении строк из листа, лучше идти по нему в цикле не с начала, а с конца. Примерно:
Delphi
1
for i := SomeStringList.Count-1 downto 0 do
1
GringoV
15 / 15 / 1
Регистрация: 29.11.2014
Сообщений: 223
22.11.2016, 13:05  [ТС] #3
Серъезно? Такой простой ответ? То есть при удалении, у нас меняется Count, но это не страшно, потому что последняя величина ноль.

Спасибо !!!
0
northener
пофигист широкого профиля
3251 / 2303 / 628
Регистрация: 15.07.2013
Сообщений: 13,591
22.11.2016, 13:11 #4
Дело не в изменении Count. Дело в том что при удалении элемента из списка меняются индексы у элементов с бОльшими значениями, чем у удаленного. В обратном цикле это не имеет значения, ибо эти элементы мы уже обработали.
0
Nanotentacle
329 / 212 / 93
Регистрация: 20.10.2016
Сообщений: 977
22.11.2016, 16:32 #5
FaTaL-CS, элегантное решение. Я до такого не допер. Работал через while.
0
GringoV
15 / 15 / 1
Регистрация: 29.11.2014
Сообщений: 223
22.11.2016, 16:35  [ТС] #6
Nanotentacle, а через while как вы делали? Я просто собирал адреса и потом по ним удалял нужные элементы.
0
Nanotentacle
329 / 212 / 93
Регистрация: 20.10.2016
Сообщений: 977
22.11.2016, 17:23 #7
Delphi
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;
Из достоинств - не надо делать проверку на заполненность списка
0
GringoV
15 / 15 / 1
Регистрация: 29.11.2014
Сообщений: 223
22.11.2016, 17:25  [ТС] #8
Nanotentacle, Спасибо!!!
0
22.11.2016, 17:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2016, 17:25
Привет! Вот еще темы с решениями:

Как правильно удалять события
Как правильно удалять события в данном случае, ибо каждое добавленное событие...

Как правильно удалять документы
Пытался написать функцию... так и не получилось ничего нормального. Может у...

как удалять несколько символов сразу из строк?
как удалять несколько символов сразу из строк? к примеру: Удалить часть...

Как правильно удалять элемент из массива?
Подскажите пожалуйста как правильно удалять элемент из динамического массива к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru