Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2012, 16:49   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Смущение Интересный момент цикла For to do

Доброго времени суток!

Предположим есть список строк(пускай путей к папкам).
Через опр. период времени список нужно чистить от трупов.

Код:
var
 iDir:Integer;
begin
 for iDir:=0 to fDirList.Count -1 do
 begin
  if Not DirectoryExists(fDirList[i]) then
  fDirList.Delete(i);
 end;
end;
Есть предположение, что в какой-то момент времени будет удалена 1 ссылка, и fDirList.Count станет на 1 меньше, но что будет с iDir?

Нужно ли самому Dec'ить iDir, чтобы цыкл не пропустил какой-то элемент списка?

Допустим сейчас кол-во ссылок показывает 35
30 ссылка сдохла, её удаляем. Счетчик ссылок(iDir) у нас на 30 и останется, а при следующем витке, счетчик увеличится на 1(будет 31), когда кол-во ссылок уже 34, и получает сдвиг на 1 элемент вниз. Итог: проскачили новый 30 элемент списка, прыгнув на 31.

Как быть?

Последний раз редактировалось Человек_Борща; 14.03.2012 в 16:57.
Человек_Борща вне форума Ответить с цитированием
Старый 14.03.2012, 17:07   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

for downto do ?
vovk вне форума Ответить с цитированием
Старый 14.03.2012, 17:35   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

или while или downto
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.03.2012, 19:09   #4
Silver_S
Форумчанин
 
Регистрация: 14.03.2011
Сообщений: 104
По умолчанию

Через downto быстрее (ссылка) и понятнее (имхо).
Если, конечно, имелось ввиду использование while так же, как и в ссылке

Последний раз редактировалось Silver_S; 14.03.2012 в 19:39.
Silver_S вне форума Ответить с цитированием
Старый 14.03.2012, 19:23   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я не говорил что быстрее, а что нет, я лишь дал два варианта решения проблемы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.03.2012, 19:39   #6
Silver_S
Форумчанин
 
Регистрация: 14.03.2011
Сообщений: 104
По умолчанию

Пепел Феникса
Извиняюсь, если прозвучало как упрек еtc .
Немного перефразирую "Интересно, что через downto быстрее, ну и, имхо, более читаемо. Если, конечно, использовать while так же, как и в ссылке"

Последний раз редактировалось Silver_S; 14.03.2012 в 19:50.
Silver_S вне форума Ответить с цитированием
Старый 14.03.2012, 20:50   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Итог: проскачили новый 30 элемент списка, прыгнув на 31.
кроме того мы будем проверять уже несуществующую 35 ссылку (и плдучим AV если повезет)
downto гарантирует и от пропусков и AV
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 14.03.2012, 22:44   #8
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Каким образом вам поможет downto, если данные, будут удаляться из произвольного места?
На мой взляд, для этих целей лучше использовать while
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 14.03.2012, 22:53   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Каким образом вам поможет downto, если данные, будут удаляться из произвольного места?
задам простой вопрос, а почему не поможет?.
когда while сделает тоже самое, но с лишней проверкой.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.03.2012, 23:09   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Каким образом вам поможет downto, если данные, будут удаляться из произвольного места?
изменения будут касаться уже проверенной части (прйденных индексов) и никак нам не повредят (пропуски, выход за границу).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритмы нахождения эйлерова цикла и гамильтонова цикла в графе. Necare Помощь студентам 0 15.11.2011 18:26
Несен момент в коде Kapitann JavaScript, Ajax 4 16.08.2010 18:20
Корелляционный момент PONKA Microsoft Office Excel 2 09.12.2009 20:29
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat McMilin Помощь студентам 7 11.11.2007 14:10