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

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

В Чем ошибка


Гриша ©   (2006-01-19 19:09:00) 

написал ф-цию которая, удалет одинаковые строки в TStrinlist
пишу так:


function TRegForm.IDent(s: TStrings): TStrings;
var
i,j:integer;
begin
 for i:=c Downto 0  do
   for j:=c Downto 0  do
   if (i<>j) and ( s[i]=s[j]) then   s.Delete(j);
end;

Но выдает ошибку List index out of bounds , в чем ошибка


Leonid Troyanovsky   (2006-01-20 08:56:00) [1]


> Гаврила ©   (19.01.06 19:58) [4]

>> См. TStringList.Duplicates
 
> Это только для сортированных списков.

> Германн ©   (20.01.06 01:04) [7]

> "После чего" исходный порядок строк восстановить невозможно.


В Objects сохраним исходный индекс (порядок появления строки).
Для восстановления исходного порядка - CustomSort.

--
Regards, LVT.


Германн   (2006-01-20 01:04:00) [2]


> Desdechado ©   (19.01.06 22:55) [6]
>
> если не жалко памяти на копию списка, то создаем внутри,
>  выставляем сортед=тру, дупликатес=игнор и всасываем в него
> из исходного
> после чего возвращаем


"После чего" исходный порядок строк восстановить невозможно. :(


Desdechado   (2006-01-19 22:55:00) [3]

если не жалко памяти на копию списка, то создаем внутри, выставляем сортед=тру, дупликатес=игнор и всасываем в него из исходного
после чего возвращаем


Гриша   (2006-01-19 20:14:00) [4]

Написал с помощью indexOf

function TRegForm.IDent(s: TStringlist): TStringlist;
var
RStr:TStringList;
i:integer;
begin
 RStr:=TStringList.Create;
for i := 0 to s.Count - 1 do
 if RStr.IndexOf(s[i]) = -1 then   RStr.Add(S[i]);
 Result:=RStr;
end;


Гаврила   (2006-01-19 19:58:00) [5]


> Leonid Troyanovsky ©


> См. TStringList.Duplicates


Это только для сортированных списков.

По сабжу: Можно и for использовать, надо только алгоритм правильно написать
по моему, совсем не сложно


Leonid Troyanovsky   (2006-01-19 19:36:00) [6]


> Гриша   (19.01.06 19:09)  
> написал ф-цию которая, удалет одинаковые строки в TStrinlist


См. TStringList.Duplicates

--
Regards, LVT.


Ega23   (2006-01-19 19:23:00) [7]

используй While


umbra   (2006-01-19 19:14:00) [8]

в том, что, допустим, на втром проходе внешнего цикла в стринглисте может остаться с-5строк, а обращаться в условии ( s[i]) будет к с-1строке


Наверх

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