FAQ > 金融建模 > 建模问题 > 数组操作

Q:如何删除数组的一行    

  • 删除数组的某一行,用户可根据列数据的条件进行删除,也可以根据行标进行删除。
    1)根据条件删除数组指定行:

      //删除列'time'中值为‘2013-12-20’的行数据
      EndT:=inttodate(20131220);
      setsysparam(pn_date(),EndT);
      r:=nday(10,'time',datetostr(sp_time()),'close',close());
      EndT_:=datetostr(EndT);
      delete from r where ['time']=EndT_;
      return r;


    2)根据行标进行删除
    方法一:

      //删除行标为5的数据
      {deleteindex(arr,indexID,merge)模型删除指定下标
      其中:
      arr:数组
      indexID:要删除的指定下标值
      merge:删除后是否自动合并,如果merge为真,则自动移动后面的数字下标
      }
      EndT:=inttodate(20131220);
      setsysparam(pn_date(),EndT);
      r:=nday(10,'time',datetostr(sp_time()),'close',close());
      indexID:=5;
      mergeflag:=1;
      deleteindex(r,indexid,mergeflag);
      return r;


    方法二:
    取子矩阵的方法

      //删除行标为5的数据
      EndT:=inttodate(20131220);
      setsysparam(pn_date(),EndT);
      r:=nday(10,'time',datetostr(sp_time()),'close',close());
      indexid:=5;
      len:=length(r)-1;
      return r[0:indexid-1,:] union r[indexid+1:len,:];



    方法三:

      EndT:=inttodate(20131220);
      setsysparam(pn_date(),EndT);
      r:=nday(10,'time',datetostr(sp_time()),'close',close());
      indexid:=5;
      //删掉第indexID行不上移
      reindex(r,array(indexid:nil));

      //如果要使其他的行上移,则需对indexID后的所有行的行标重新设置
      //语法:reindex(r,array(indexID:nil,indexid+1:indexID,indexid+2:indexID+1)....);
      reindex(r,array(5:nil,7:6,8:7,9:8));
      return r;