如果你定义数组的时候不指定长度,就可以动态扩充数组大小的。楼上那个要注意设置的长度小于当前数组长度的问题。
以下是引用linxingywei在2017/8/17 16:46:23的发言:请问定义数组的时候不指定长度,是这样设定吗?variable:A1[]
动态扩充数组大小,是用SETUBOUND函数吗?
如果设置的长度小于当前数组长度,会有什么问题?
3楼回复错了。
VARIABLE:t[10]=0;//或者VARIABLE:t[]=0
t:=open-close;
上面的代码,就是动态填充的例子。新的元素会不断填充到数值后面。不断扩充数组大小。SETUBOUND的话,如果你现在数组长度是100,你设置成50,你数组就有一半的数据被砍掉了。
我看SETUBOUND的函数说明,使用SETUBOUND(x,0),可以使清空数组,但是我用了下,发现这种写法并不能清空数组,之前对数组的赋值,还是保留。
以下是引用linxingywei在2017/8/17 17:38:01的发言:我看SETUBOUND的函数说明,
使用SETUBOUND(x,0),可以使清空数组,但是我用了下,发现这种写法并不能清空数组,之前对数组的赋值,还是保留。
我看下你代码怎么写的。
VARIABLE:t[]=0;
if open>close then t:=open-close;
a:UBOUND(t);
if a>100 then SETUBOUND(t,0);
s:UBOUND(t);
我测试了可以的啊。
但是我测试下来,清空没有作用。VARIABLE:t[]=0;
if open>close then t:=open-close;
a:UBOUND(t);
a1:t[1];
if a>100 then SETUBOUND(t,0);
s:UBOUND(t);
s1:t[1];
SETUBOUND(t,20);
s2:t[1];
显示的结果:
此主题相关图片如下:2017-08-18_150736.jpg

如果SETUBOUND(t,0), 是把数组清空的话,s 应该显示 0 ,但是显示的和a的值是一样的。
a1和s1取的数组第一个元素值也是相同的。
以下是引用linxingywei在2017/8/18 15:09:57的发言:但是我测试下来,清空没有作用。
VARIABLE:t[]=0;
if open>close then t:=open-close;
a:UBOUND(t);
a1:t[1];
if a>100 then SETUBOUND(t,0);
s:UBOUND(t);
s1:t[1];
SETUBOUND(t,20);
s2:t[1];
显示的结果:
此主题相关图片如下:2017-08-18_150736.jpg

如果SETUBOUND(t,0), 是把数组清空的话,s 应该显示 0 ,但是显示的和a的值是一样的。
a1和s1取的数组第一个元素值也是相同的。
1.我按照你的代码测试,a无法大于100(你那上边是825)。每次扩充数据就报错,数组报“越界错误”,这说明清空是成功的。这个应该是这样的:在数据较小的情况下,阴线数目达不到100,但是一旦扩充数据。就能触发清空操作,然后t[1]这种语句就会报错。
此主题相关图片如下:1.png

2.你那边是不是用了序列模式?只有序列模式才会这样,其中细节我再测试下。我研先究下序列模式下数组的操作问题。回头在这个帖子我会继续回复的。