如何删除 ListView 中的重复项?

How to remove duplicate items in a ListView?

我有一个 TListView,里面有一些东西:

item1
item1
item2

我想在单击按钮时删除重复项:

item1
item2

到目前为止,这是我的代码:

procedure TMainForm.Button3Click(Sender: TObject);
var i,j, k: integer;
begin
  I := 0;
  while I < ListView1.Items.Count  do
  begin
    for j := ListView1.Items.Count - 1 downto 0 do
    begin
      if ListView1.Items[I].SubItems[3] = ListView1.Items[j].SubItems[3] then
        ListView1.Items.Delete(J);
        Continue;
       end;
       Inc(I);
  end;
end;

正在删除所有项目。我该如何解决这个问题?

当您调用 Delete() 时,项目不会立即被删除。 ListView 必须 return 到消息循环才能真正删除项目。因此,如果您有相同的商品,例如第 1 行和第 4 行,这两行都将被删除:

  • 第 4 行当 i=1j=4
  • 第 1 行当 i=4j=1

这是通过将 for j := ... 循环更改为:

来解决的
for j := ListView1.Items.Count - 1 downto i+1 do // instead of downto 0

这确保一对线只比较一次,并且删除两条相等线中的后者。