delphi - 快速查找字符串列表中的重复项

标签 delphi

在 Tstringlist 中查找重复项的最快方法是什么。我获得了在字符串列表中搜索重复项所需的数据。我目前的想法是这样的:

    var  TestStringList, DataStringList  : TstringList;


    for i := 0 to  DataStringList.Items-1 do
    begin
        if TestStringList.Indexof(DataStringList[i])< 0 < 0 then
        begin
          TestStringList.Add(DataStringList[i])
        end
        else
        begin
           memo1.ines.add('duplicate item found');
        end;

    end;
   ....

最佳答案

只是为了完整性,(并且因为您的代码实际上并未使用重复项,而只是表明已找到一个重复项):Delphi 的 TStringList 具有处理重复条目的内置功能,在它的 Duplicates 属性中。将其设置为 dupIgnore 将简单地丢弃您尝试添加的任何重复项。请注意,目标列表必须进行排序,否则Duplicates 无效。

TestStringList.Sorted := True;
TestStringList.Duplicates := dupIgnore;

for i := 0 to  DataStringList.Items-1 do
   TestStringList.Add(DataStringList[i]);
Memo1.Lines.Add(Format('%d duplicates discarded',
                      [DataStringList.Count - TestStringList.Count]));

快速测试表明,如果使用SortedDuplicates,则可以删除整个循环:

TestStringList.Sorted := True;
TestStringList.Duplicates := dupIgnore;

TestStringList.AddStrings(DataStringList);
Memo1.Lines.Add(Format('%d duplicates discarded',
                      [DataStringList.Count - TestStringList.Count]));

请参阅TStringList.Duplicates文档以获取更多信息。

关于delphi - 快速查找字符串列表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284819/

相关文章:

delphi - TFDTable 中的降序排序会导致重复行

Delphi 10.2.3 在启动(调试)32 位应用程序时挂起

delphi - 使用 Devexpress VCL 13.1.2 时出现 Stackoverflow 错误(无限循环)

delphi - 如何调用 NtOpenFile?

delphi - 如何使用 Indy 发送 DELETE 请求?

c - 如何使用正确的变量值在 Delphi 中调用 dll C 函数?

德尔福通用框架

delphi - 印地 HTTP : Cannot change Host header

delphi - 解决无法加载 BPL 但您已经重新编译的 Delphi BPL 包问题(Windows VirtualStore 文件系统问题)

delphi - 在运行时添加 stringgrid 列