Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

удаление строк из списка [D7, XP]


V0va ©   (2006-01-24 12:19:00) 

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

procedure DeleteThis(const ID: Word);
var aItem    : pItem;
   i, j, k, u : Word;
begin
 j := FList.Count;
 for i := 0 to j -1 do
 begin
   u := FList.Count;

   for k := 0 to u -1 do
   begin
     aItem := FList.Items[k];
     if (aItem.ItsID = ID) then
     begin
       FList.Remove(aItem);
       Break;
     end;
   end;

 end;
end;


V0va   (2006-01-24 13:56:00) [1]


> for k := FList.Count -1 downto 0 do

дада)) туплю туплю))


Aleks   (2006-01-24 13:38:00) [2]

)


MBo   (2006-01-24 13:20:00) [3]

for k := FList.Count -1 downto0 do


Ega23   (2006-01-24 13:15:00) [4]

Используй не for, а while ибудет тебе щщастье.


V0va   (2006-01-24 12:33:00) [5]

фишка в том, что там их много соответсвующих этому же условию, потому приходится искать до победного, а вот так вот если сделаешь, то сами знаете что будет "List index out of bounds" ;(

  for k := 0 to FList.Count -1 do
  begin
    aItem := FList.Items[k];
    if (aItem.ItsID = ID) then FList.Remove(aItem);
  end;


ЮЮ   (2006-01-24 12:31:00) [6]

а зачем цикл в цикле? Неужели после удаления элемента при первом прорходе его стоит искать ещё FList.Count - 1 раз?


Наверх

Титульная страница Поиск, карта сайта Написать письмо