首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListBox过滤

ListBox过滤
EN

Stack Overflow用户
提问于 2010-06-21 17:36:20
回答 2查看 1.9K关注 0票数 3

我有一个有10,000个项目和许多重复项目的ListBox!我要将它保存到一个没有重复项目的文件中(一个项目而不是所有副本!)我是这样使用的:

代码语言:javascript
复制
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;

我使用上面的代码来检测现有的项目,并使用以下过程来保存它:

代码语言:javascript
复制
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;

但这需要很长很长的时间才能进行。有没有更好更快的方法?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-21 17:48:21

试试这个

代码语言:javascript
复制
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;
票数 7
EN

Stack Overflow用户

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3083489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档