ソートされたTstringlistにdupignoreを使用して、TStringListから重複する文字列を削除する方法を知っています。DelphiでソートせずにTStringListから重複する行を削除する
CallData := TStringList.Create;
CallData.Sorted := True;
Call.Duplicates := dupIgnore;
しかし、私の場合は、文字列はをソートしてはいけません。
TStringListに何十万行もある場合、FORループを使用すると重複を見つけるのが非常に遅くなります(indexOF()も使用します)。
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;
もっと良い方法がありますか?ここで
ありがとうございました。他のものよりも速いです。 –