Wiem, jak usunąć duplikaty łańcuchów z TStringList przy użyciu dupignore dla posortowanej listy ciągów.Usuwanie duplikatów linii z TStringList bez sortowania w Delphi
CallData := TStringList.Create;
CallData.Sorted := True;
Call.Duplicates := dupIgnore;
ale w moim przypadku ciągów nie musi być sortowane.
Używanie duplikatów wyszukiwania pętli FOR jest bardzo powolne (również przy użyciu indexOF()), gdy TStringList ma setki tysięcy wierszy.
if OpenDialog1.Execute then
begin
Try
y := TStringList.create;
f := TStreamReader.create(OpenDialog1.FileName, TEncoding.UTF8, True);
while not f.EndOfStream do
begin
l := f.ReadLine;
X.Add(l);
end;
g := Tstreamwriter.create('d:\logX.txt', True, TEncoding.UTF8);
for I := 0 to X.count - 1 do
begin
if y.IndexOf(X[I]) = -1 then
y.Add(X[I]);
end;
for j := 0 to y.count - 1 do
g.WriteLine(y[j]);
Finally
f.free;
y.free;
g.free;
End;
end;
Czy istnieje lepszy sposób?
Dzięki dużo. Jest szybszy niż inne. –