Edit1.Text里有字符串:1,2,3,4,
然后我把这些字符串赋值给数组idArray
Edit2.Text输入1或2或3或4来进行数组删除,我输入2删除后Edit1.Text里的结果是1,3,4,
我再输入3删除后Edit1.Text里的结果是1,4,1,4,
现在问题来了,输入3删除后为什么Edit1.Text里的结果不是1,4,呢?而是1,4,1,4,呢?
输入4删除后结果是1,1,1,1,呢?为什么不是1,呢?procedure TForm1.Button1Click(Sender: TObject);
var
  count,i,j,t:integer;
  s:string;
begin
    s:=Edit1.Text;
    count:=0;
    for i := 1 to Length(s) do
    begin
      if s[i] = ',' then Inc(count);
    end;    for i:=1 to count do
    begin
      if (copy(s,1,pos(',',s)-1)<>',') and (copy(s,1,pos(',',s)-1)<>'') then
      begin
        SetLength(idArray, Length(idArray)+1);
        idArray[Length(idArray)-1]:=strtoint(copy(s,1,pos(',',s)-1));
        s:=copy(s,pos(',',s)+1,length(s));
      end;
    end;    for i:=Low(idArray) to High(idArray) do//删除数组某个元素
    begin
      if idArray[i]=strtoint(Edit2.Text) then
      begin
        SetLength(idArray, Length(idArray)+1);
        t:=idArray[high(idArray)];
        idArray[i]:=t;
        setlength(idArray,length(idArray)-1);
      end;  
    end;    s:='';
    for i:=Low(idArray) to High(idArray) do
    begin
      if idArray[i]<>0 then
      begin
        if s='' then
          s:=inttostr(idArray[i])
        else
          s:=s+','+inttostr(idArray[i]);
      end;
    end;    Edit1.Text:=s+',';    
end;

解决方案 »

  1.   

    你的数组没释放,造成了叠加。
    加一句就可以了。begin
      s:=Edit1.Text;
      count:=0;
      idArray:= nil;  //释放(清空)动态数组
      for i := 1 to Length(s) do
      begin
      if s[i] = ',' then Inc(count);
      end;
      

  2.   

      for i:=Low(idArray) to High(idArray) do//删除数组某个元素
       begin
       if idArray[i]=strtoint(Edit2.Text) then
       begin
       SetLength(idArray, Length(idArray)+1);
       t:=idArray[high(idArray)];
       idArray[i]:=t;
       setlength(idArray,length(idArray)-1);
       end;   
      end;这个蹩脚的逻辑还是换掉吧
    1 首先数组不像链表提供删除功能,因为他是连续分配的空间,能随便删除那就不是连续了
    2 如果想删除可以用两种方法
    1) 清零
    2)目标之后所有元素向前移动
    3 建议LZ还是用tlist,tstringlist之类的东西代替数组吧