开拓者期货期权程序化系统交易论坛

标题: 反馈往数组末尾插入一项的bug [打印本页]

作者: 扶老二    时间: 2015-7-20 11:30:44     标题: 反馈往数组末尾插入一项的bug

NumericArrayInsert(arr, GetNumericArraySize(arr), 1350);

反馈个bug,请问为啥这样往数组末尾动态插入一项,会导致数组除了插入了值是1350的这项外,其后面还额外增加了值为0的一项,如何解决?
作者: tianlan    时间: 2015-7-20 13:11:14

数组的范围声明和你通过NumericArrayInsert函数增加是一回事,如果你通过在程序中取值,那么它也会对数组大小改变。例如你声明了 Vars    NumericArray arr[10];  在后面 Commentary(Text(arr[100]))输出,那么大小就改变了。

作者: 扶老二    时间: 2015-7-20 13:30:21

本帖最后由 扶老二 于 2015-7-20 13:31 编辑
tianlan 发表于 2015-7-20 13:11
数组的范围声明和你通过NumericArrayInsert函数增加是一回事,如果你通过在程序中取值,那么它也会对数组大 ...


这个我知道,关键现在问题是我动态往数组后面插入新的一项,应该怎么做?不是用NumericArrayInsert(arr, GetNumericArraySize(arr), 1350);吗?
作者: tianlan    时间: 2015-7-20 15:07:40

扶老二 发表于 2015-7-20 13:30
这个我知道,关键现在问题是我动态往数组后面插入新的一项,应该怎么做?不是用NumericArrayInsert(arr,  ...

是啊,然后你就要注意在NumericArrayInsert有没有超过原定范围的使用。
作者: 扶老二    时间: 2015-7-20 15:36:26

本帖最后由 扶老二 于 2015-7-20 18:26 编辑
tianlan 发表于 2015-7-20 15:07
是啊,然后你就要注意在NumericArrayInsert有没有超过原定范围的使用。


超过了的。比如之前是空数组,然后用NumericArrayInsert(arr, GetNumericArraySize(arr), 1350);动态push一项进去之后,数组长度变成2了,除了push进去的1350之外,还多push进去了一项,值是0,如何解决?每次动态往数组最后插入一项之后,都会同时额外多插入值是0的一项,很无语,要不你试试?
作者: tianlan    时间: 2015-7-21 09:22:11

扶老二 发表于 2015-7-20 15:36
超过了的。比如之前是空数组,然后用NumericArrayInsert(arr, GetNumericArraySize(arr), 1350);动态push ...

这个不是bug,这是为了防止数组越界必须要遵守的规则。
作者: 扶老二    时间: 2015-7-21 12:58:28

那么请问,我要往一个数组末尾动态追加一项,应该使用什么写法?
作者: 扶老二    时间: 2015-7-21 13:01:38

tianlan 发表于 2015-7-21 09:22
这个不是bug,这是为了防止数组越界必须要遵守的规则。

那么请问往数组末尾追加一项,需要用什么样的写法?
作者: tianlan    时间: 2015-7-21 14:50:50

扶老二 发表于 2015-7-21 13:01
那么请问往数组末尾追加一项,需要用什么样的写法?

NumericArrayInsert(arr, GetNumericArraySize(arr)-1, 1350);
作者: 扶老二    时间: 2015-7-21 18:27:38

tianlan 发表于 2015-7-21 14:50
NumericArrayInsert(arr, GetNumericArraySize(arr)-1, 1350);

这样是不行的,这样只写是往最后一个元素前面插入,而不是后面插入。
作者: 扶老二    时间: 2015-7-21 23:56:10

tianlan 发表于 2015-7-21 14:50
NumericArrayInsert(arr, GetNumericArraySize(arr)-1, 1350);


Vars
    NumericArray arr;
Begin
        NumericArrayInsert(arr, GetNumericArraySize(arr)-1, 1);
        NumericArrayInsert(arr, GetNumericArraySize(arr)-1, 2);
        NumericArrayInsert(arr, GetNumericArraySize(arr)-1, 3);
        Commentary("arr[0]:" + Text(arr[0]));
        Commentary("arr[1]:" + Text(arr[1]));
        Commentary("arr[2]:" + Text(arr[2]));
        Commentary("arrLen:" + Text(GetNumericArraySize(arr)));
End

比如这样往空数组最末尾插入3项,但是数组却是: [2,3,1],而不是[1,2,3],如何解决?
作者: tianlan    时间: 2015-7-22 10:49:17

Vars
    NumericArray arr;
Begin
       NumericArrayInsert(arr, GetNumericArraySize(arr), 1);
       NumericArrayInsert(arr, GetNumericArraySize(arr)-1, 2);
       NumericArrayInsert(arr, GetNumericArraySize(arr)-1, 3);
               
        Commentary("arr[0]:" + Text(arr[0]));
        Commentary("arr[1]:" + Text(arr[1]));
        Commentary("arr[2]:" + Text(arr[2]));
                Commentary("arr[2]:" + Text(arr[3]));
               
        Commentary("arrLen:" + Text(GetNumericArraySize(arr)));
End

插入的时候,总是牵涉到初始化和插入的起始位置的问题,第一个 GetNumericArraySize(arr)-1或者 GetNumericArraySize(arr)也就没有意义。
作者: 扶老二    时间: 2015-7-22 12:55:39

tianlan 发表于 2015-7-22 10:49
Vars
    NumericArray arr;
Begin

赞,这样子可以往数组末尾不断插入新项,谢谢!
作者: 扶老二    时间: 2015-7-22 22:50:26

tianlan 发表于 2015-7-22 10:49
Vars
    NumericArray arr;
Begin

斑竹,还有个问题,就是用这个实现,最后末尾会多出一项,值是0,如何解决?
作者: tianlan    时间: 2015-7-24 08:41:40

扶老二 发表于 2015-7-22 22:50
斑竹,还有个问题,就是用这个实现,最后末尾会多出一项,值是0,如何解决? ...

因为牵涉到插入位置的问题,如果不影响您使用的话,建议您忽略
作者: 扶老二    时间: 2015-7-24 23:33:26

tianlan 发表于 2015-7-24 08:41
因为牵涉到插入位置的问题,如果不影响您使用的话,建议您忽略

好的,谢谢
作者: lolo1973    时间: 2016-6-16 10:18:24

扶老二 发表于 2015-7-22 22:50
斑竹,还有个问题,就是用这个实现,最后末尾会多出一项,值是0,如何解决? ...

用NumericArrayErase(arr, gerNumericArraySize(arr)-1, 1)删除。。




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2