ListBox过滤

Arm*_*min 3 delphi listbox delphi-7 duplicate-removal

我有一个包含10,000个项目和许多重复项目的列表框!我想把它保存到没有重复项目的文件(一个项目而不是所有副本!)并且我使用这种方式:

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;
Run Code Online (Sandbox Code Playgroud)

我使用上面的代码来检测现有项目并按照以下步骤保存它:

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;
Run Code Online (Sandbox Code Playgroud)

但它需要很长时间才能继续.有没有更好更快的方法?谢谢.

Bha*_*rat 7

试试这个吧

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;
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记在最后添加一个StrList.Free(最好在尝试之后..最后). (8认同)
  • 只是为了添加Bharat的答案:由于Delphi6 TStringList具有CaseSensitive属性,该属性控制如何为"duplicate-ness"评估字符串. (2认同)