如何从Delphi中删除ListBox中的重复项?我知道这个:
for i := ListBox1.Items.Count-1 downto 1 do
for j := 0 to i-1 do
if ListBox1.Items[i] = ListBox1.Items[j] then
ListBox1.Items.Delete[i];
但是我需要删除重复项,只有前10个字母相同,所以我试过这个:
for i := ListBox1.Items.Count-1 downto 1 do
for j := 0 to i-1 do
if copy(ListBox1.Items[i],1,11) = copy(ListBox1.Items[j],1,11) then
ListBox1.Items.Delete[i];
但是当我尝试删除重复项时,我会从债券错误中获取列表:(
答案 0 :(得分:10)
您需要在break
之后添加Delete
:
if Copy(ListBox1.Items[i], 1, 10) = Copy(ListBox1.Items[j], 1, 10) then
begin
ListBox1.Items.Delete(i);
break;
end;
(的确,如果您Delete
指定了i
的项目,那么下次如何进行比较if Copy(ListBox1.Items[i], 1, 10) = ...
?)
答案 1 :(得分:4)
如果您不介意对ListBox1
中的项目进行排序,可以一次性删除重复项。
var
s: string;
I: Integer;
begin
ListBox1.Sorted := True;
s := '';
I := 0;
while I < ListBox1.Count do
begin
if s = copy(ListBox1.Items[I], 1, 10) then
begin
ListBox1.Items.Delete(I);
end
else
begin
s := copy(ListBox1.Items[I], 1, 10);
Inc(I);
end;
end;
end;