比较后从TStringList中删除多个项目

Ste*_*e88 0 delphi delphi-xe

任何人都可以帮助比较两个stringlist并从中获得差异的最佳方法是什么?

例如,如果我有AList和BList之类的话

一个列表

  • ABC
  • CDE
  • EFG
  • KLM
  • STA
  • LMO
  • TKJ

BList

  • ABC
  • CDE
  • EFG
  • KLM
  • STA
  • LMO
  • TKJ
  • FGJ
  • FGJ
  • IJE

如果我比较他们就好

     for i := 0 to BList.count-1 do
       if AList.indexof(BList[i]) < 0 then
         ResultList.Add(BList[i]);
Run Code Online (Sandbox Code Playgroud)

结果是:

  • FGJ
  • FGJ
  • IJE

我只需要一次元素.我怎样才能避免多件物品?有没有比制作从List中删除多个项目的过程更好的解决方案?对不起我的英文,谢谢你的帮助!

Tom*_*erg 8

TStringList有一个属性Duplicates,用于控制尝试将重复项添加到排序列表时应该发生的情况.

从文档:

dupIgnore 忽略尝试将重复的字符串添加到列表中.

当尝试将重复的字符串添加到已排序的列表时,dupError会引发EStringListError异常.

dupAccept 允许排序列表中的重复字符串.

所以,设置

  ResultList.Sorted := True;
  ResultList.Duplicates := dupIgnore;
Run Code Online (Sandbox Code Playgroud)

  • FWIW,这对于大型数据集来说效率非常低,因为维护排序列表的开销以及在每次添加列表时搜索重复项的开销。 (2认同)