Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.033 c
2-1137519817
49 Cent
2006-01-17 20:43
2006.02.05
Проблемы с фильтрацией в Dbgrid


15-1136835961
ArtemESC
2006-01-09 22:46
2006.02.05
Философский вопрос...


2-1137802255
drag
2006-01-21 03:10
2006.02.05
ADO &amp; BDE


1-1135859646
Mikhail
2005-12-29 15:34
2006.02.05
причина ошибки ? для Delphi 2005 под VCL Forms App for Net


1-1136455438
Kot_
2006-01-05 13:03
2006.02.05
Как прекратить выполнение программы в процессе инициализации?




   Наверх