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

Q:如何修改数组的列名(列下标)    

  • A:修改列名,方法很多。可以使用renamefield, reindex2/ reindex,类SQL或者矩阵,其各类方法应用场景如下:
    以下所有范例中的案例数据:
    data:=array(
    ("stockid":"SZ000002","date":"2018-12-03","close":25.73,"vol":60814944.0),
    ("stockid":"SZ000002","date":"2018-12-04","close":25.13,"vol":50994597.0),
    ("stockid":"SZ000002","date":"2018-12-05","close":25.3,"vol":40717606.0),
    ("stockid":"SZ000002","date":"2018-12-06","close":25.1,"vol":24302282.0));

    范例1:单个列名的更改:将'date'更改为'日期'
    //方法一:renamefield    renamefield(data,'date','日期');
       return data;
    //方法二:reindex
     reindex(data,nil,array('date':'日期'));
       return data;

    范例2:批量修改列名:修改为自增序列
    //方法一:类SQL return select selectopt(8)* from data end;
    //注:该用法同时更改了行标为自增序列
    //方法二:reindex2
    return reindex2(data,0);

    范例3:批量修改列名:批量修改为指定列名
    mArr:=array('stockid':'代码','date':'日期','close':'收盘','vol':'成交量');
    reindex(data,nil,mArr);
    return data;

    注:需生成array('stockid':'代码','date':'日期','close':'收盘','vol':'成交量')对照组
    若开发者希望通过顺序对照,如希望依次按names:=array('代码','日期','收盘','成交量');顺序修改对应列名,则可通过下面方式加工处理:
    names:=array('代码','日期','收盘','成交量');
    cArr:=nils(mcols(data,1));
    cArr[:]:=names;//生成上述的mArr的结构数据
    reindex(data,nil,cArr);
    return data;