我定义了一个动态数组A,类型是记录类型,加入了
A[0],A[1],A[2],……几个值,现在想删除A[1],
删除后不能有中断,原来的A[2]变为A[1],
A[3]变为A[2],……同时长度缩短一位,不知怎么做,
在线等待,马上给分。

解决方案 »

  1.   

    for i:=1 to n-2 do
        A[i] := A[i+1];
    如果删除A[7],则
    for i:=7 to n-2 do
        A[i] := A[i+1];
      

  2.   

    procedure delArrayNum(i:integer);
     var
      j:integer;
    begin
     for j:=i to high(a)-1 do
      a[j]:=a[j+1];
     setlength(a,high(a));
    end;
      

  3.   

    procedure TFDemo.Button2Click(Sender: TObject);
    var
      a:array of string;
      i,j,k,ArrayLeng:integer;
    begin
      ArrayLeng:=7;
      setlength(a,ArrayLeng);
      for i:=0 to ArrayLeng-1 do
        a[i]:='sample'+inttostr(i);
      //例如想删除位置j的数组
      j:=2;
      for i:=j to length(a)-2 do
      begin
        a[i]:=a[i+1];
      end;
      //重新设置长度
      SetLength(a,Length(a)-1);
    end;
      

  4.   

    应该是
    for i:=1 to n-1 do
        A[i] := A[i+1];
    如果删除A[7],则
    for i:=7 to n-1 do
        A[i] := A[i+1];
    才对吧
      

  5.   

    length(a)-2 还是 length(a)-1
      

  6.   

    当数组长度为7的时候  
    j的取值最大只能为6呀
    你的A[7]不是变成8位长度的数组了吗
    我的j:=2只是给你举个例子数组的下维从0开始 如
    for i:=0 to length(A)-1 do
    而不是i:=1 to length(A)-1 do
      

  7.   

    当然是
    length(a)-2
    这个不要写错