从Delphi中删除ListBox中的重复项

时间:2011-10-21 18:53:08

标签: delphi for-loop duplicate-removal

如何从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]; 

但是当我尝试删除重复项时,我会从债券错误中获取列表:(

2 个答案:

答案 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;
相关问题