在 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]));
快速测试表明,如果使用Sorted
和Duplicates
,则可以删除整个循环:
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/