如何删除 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=1
和 j=4
- 第 1 行当
i=4
和 j=1
这是通过将 for j := ...
循环更改为:
来解决的
for j := ListView1.Items.Count - 1 downto i+1 do // instead of downto 0
这确保一对线只比较一次,并且删除两条相等线中的后者。
我有一个 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=1
和j=4
- 第 1 行当
i=4
和j=1
这是通过将 for j := ...
循环更改为:
for j := ListView1.Items.Count - 1 downto i+1 do // instead of downto 0
这确保一对线只比较一次,并且删除两条相等线中的后者。