Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

Удаление из списка строк   Найти похожие ветки 

 
Дмитрий_177   (2005-12-25 13:29) [0]

Есть список, Str: TStringList; и мне нужно из него удалить строки которые удовлетворяют какому-то условию. Сделал я так:


if Str.Count > 0 then
 begin
 for i := 0 to Str.Count - 1 do
   begin
   if Str[i] = <чему то там> then
     begin
     Str.Delete(i);
     end;
   end;
 end;


Т.к. нужно все строки проверить и удалить нужные, break в цикле не стоит. Но у меня вылитает ошибка при удалении, я как понимаю она из за того, что цикл пробегает по всем строкам, но т.к. некоторые строки вы удаляем в этом цикле, то то ближе к концу цикла он уже начинает проверять строки, которых уже нету... Так вот как мне лучше организовать такое удаление? Пока я думаю сделать вот как: создать численный массив, и в цикле в этот массив вносить индексы тех строк которые нужно удалить, и потом после цикла удалить их... может есть еще получше какойнибудь способ?


 
Anatoly Podgoretsky ©   (2005-12-25 13:38) [1]

for i := Str.Count - 1 downto 0 do


 
Кефир87 ©   (2005-12-25 13:38) [2]


for i := Str.Count - 1 downto 0  do
  begin
  if Str[i] = <чему то там> then
    begin
    Str.Delete(i);
    end;
  end;


 
Кефир87 ©   (2005-12-25 13:39) [3]

Одновременно 8)


 
Дмитрий_177   (2005-12-26 15:57) [4]

Как оказалось не так уж все и сложно ))) Спасибо!


 
SergP.   (2005-12-26 16:37) [5]


> Кефир87 ©   (25.12.05 13:38) [2]
>
> for i := Str.Count - 1 downto 0  do
>   begin
>   if Str[i] = <чему то там> then
>     begin
>     Str.Delete(i);
>     end;
>   end;


а зачем все эти бегины и енды?


 
Дмитрий_177   (2005-12-27 00:06) [6]

SergP.

> а зачем все эти бегины и енды?


Это кому как нравится, тут можно и без них обойтись...))) Но мне как-то удобней читать с бегинами и индами код... да и привык уже их так стать, что после for или еще чегонибудь там всегда бегин )))


 
Германн ©   (2005-12-27 01:14) [7]

2 Anatoly Podgoretsky ©   (25.12.05 13:38) [1]
2 Кефир87 ©   (25.12.05 13:38) [2]

А вот интересно. Насколько умён "оптимизатор"?
Включается ли он только тогда, когда границы цикла for включают только "константы"?
Я говорю только о реализации самого цикла, а не его тела.


 
Джо ©   (2005-12-27 01:16) [8]


>  [7] Германн ©   (27.12.05 01:14)

Так в любом случае, с функциональной точки зрения, границы диапазона для цикла for и являются константами? Или я не понял вопроса?


 
Германн ©   (2005-12-27 01:22) [9]

2 Джо ©   (27.12.05 01:16) [8]
Наверно не понял. :-)
Границы диапазона являются константами в том смысле, что они вычисляются до выполнения цикла. Но если они, точнее некие значения, выражения и т.п., которыми они представлены в исходнике могут меняться в Run-Time, то "оптимизатор" видя в исходнике такое сразу отключается.


 
Джо ©   (2005-12-27 01:24) [10]


>  [9] Германн ©   (27.12.05 01:22)

А... ну, может быть не знаю, не экспериментировал. Сорри за оффтопик.



Страницы: 1 вся ветка

Текущий архив: 2006.01.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
1-1134062536
Andy BitOff
2005-12-08 20:22
2006.01.15
Отображение MessageBox поверх всех окон.


14-1135169365
Digitman
2005-12-21 15:49
2006.01.15
Yamaha Vocaloid v1.x


2-1135701424
dera
2005-12-27 19:37
2006.01.15
Как в реестре сделать параметр DWORD?


14-1135085051
Иксик
2005-12-20 16:24
2006.01.15
Удаленная тех. поддержка


14-1135311825
Ученик чародея
2005-12-23 07:23
2006.01.15
Европа официально признала, что в глюках программ виновата Винда.