我有一个有10,000个项目和许多重复项目的ListBox!我要将它保存到一个没有重复项目的文件中(一个项目而不是所有副本!)我是这样使用的:
Function TMain.List_ExistsIn(ListBox_NAme: TListBox; EParameter: String): Integer;
Var
i: Integer;
Begin
EParameter := LowerCase(EParameter);
Result := -1;
For i:=0 To ListBox_Name.Items.Count - 1 Do
If EParameter = Lowercase(ListBox_Name.Items[i]) Then Begin
Result := i;
Break;
End;
End;我使用上面的代码来检测现有的项目,并使用以下过程来保存它:
Procedure TMain.MakeList(ListBox_Name: TListBox; FileName: String); //================
Var
i: Integer;
Temp_ListBox: TListBox;
Begin
Temp_ListBox := TListBox.Create(Main);
With Temp_ListBox Do Begin
Parent := Main;
Clear;
For i:=0 To ListBox_Name.Count - 1 Do
If Main.List_ExistsIn(Temp_ListBox, ListBox_Name.Items[i]) = -1 Then
Items.Add(ListBox_Name.Items[i]);
Items.SaveToFile(FileName);
Free;
End;
End;但这需要很长很长的时间才能进行。有没有更好更快的方法?谢谢。
发布于 2010-06-21 17:48:21
试试这个
procedure TForm1.FormCreate(Sender: TObject);
var
StrList: TStringList;
I: Integer;
begin
StrList := TStringList.Create;
StrList.Sorted := True;
StrList.Duplicates := dupIgnore;
StrList.AddStrings(ListBox1.Items); //Your List Box Items
StrList.SaveToFile('C:\abc.txt');
StrList.Free; //Cleanup
end;发布于 2010-06-25 12:51:57
注意臭名昭著的CompareString()效果……
将59A、5-9A、59-A、-59-A插入到排序列表1中。列表变为59A、-59-A、5-9A、59-A,.Find()或.IndexOf()将无法定位59-A。
现在将相同的值插入到排序列表2中,但以59A、-59-A、5-9A、59-A的顺序插入。列表变为59A、59-A、-59-A、5-9A。.Find()和.IndexOf()可以定位59-A。
有关更多详细信息,请参阅this blog。
https://stackoverflow.com/questions/3083489
复制相似问题