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

Вниз

В Чем ошибка   Найти похожие ветки 

 
Гриша   (2006-01-19 19:09) [0]

написал ф-цию которая, удалет одинаковые строки в 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 , в чем ошибка


 
umbra ©   (2006-01-19 19:14) [1]

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


 
Ega23 ©   (2006-01-19 19:23) [2]

используй While


 
Leonid Troyanovsky ©   (2006-01-19 19:36) [3]


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


См. TStringList.Duplicates

--
Regards, LVT.


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


> Leonid Troyanovsky ©


> См. TStringList.Duplicates


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

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


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

Написал с помощью 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;


 
Desdechado ©   (2006-01-19 22:55) [6]

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


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


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


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


 
Leonid Troyanovsky ©   (2006-01-20 08:56) [8]


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

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

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

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


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

--
Regards, LVT.



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

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

Наверх




Память: 0.48 MB
Время: 0.028 c
15-1137108846
Quattro
2006-01-13 02:34
2006.02.05
KaZaa


4-1132310115
Stany
2005-11-18 13:35
2006.02.05
отлов MessageBox а от определ. окна


15-1137262974
LordOfRock
2006-01-14 21:22
2006.02.05
Проблема :( (Windows XP Sp2)


4-1132933783
badevlad
2005-11-25 18:49
2006.02.05
Получить путь к файлу по его Handle


2-1137667174
Silver__Dragon
2006-01-19 13:39
2006.02.05
коды клавиш