马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 贪吃蛇 于 2015-5-16 17:05 编辑
先上代码:(谢谢 忆辰辅助)- 变量 a=数组("a"=0,"b"=1,"c"=2,"d"=3,"e"=4)
- 调试输出("原始数组="&a)
- 调试输出("原始数组大小="&数组大小(a))
- 变量 p=0
- 循环(a[p]!=null)
- 调试输出("a["&p&"]="&a[p]) //①
- 如果(p<3)
- 数组指定位置删除(a,p) //②
- 结束
- p++
- 调试输出("p="&p&":数组"&a)
- 调试输出("p="&p&"数组a大小="&数组大小(a))
- 结束
- 调试输出("循环结束后,数组大小="&数组大小(a)&",数组="&a)
- 调试输出("以下为删除后的数组:")
- 遍历(变量 i = 0; i < 数组大小(a); i++)
- 调试输出("数组大小="&数组大小(a)&" a["&i&"]="&a[i])
- 结束
复制代码
输出结果:
1,输出>>"原始数组=array("0"=0,"1"=1,"2"=2,"3"=3,"4"=4)"
2,输出>>"原始数组大小=5"
3,输出>>"a[0]=0"
4,输出>>"p=0:数组array("1"=1,"2"=2,"3"=3,"4"=4)"
5,输出>>"p=0数组a大小=4"
6,输出>>"a[1]=1"
7,输出>>"p=1:数组array("1"=1,"3"=3,"4"=4)"
8,输出>>"p=1数组a大小=3"
9,输出>>"循环结束后,数组大小=4,数组=array("1"=1,"3"=3,"4"=4,"2"=)"
10,输出>>"以下为删除后的数组:"
11,输出>>"数组大小=4 a[0]="
12,输出>>"数组大小=5 a[1]=1"
13,输出>>"数组大小=5 a[2]="
14,输出>>"数组大小=5 a[3]=3"
15,输出>>"数组大小=5 a[4]=4"
之前我以为是函数 数组指定位置删除 只删除值而非元素造成的,仔细分析原来我错了,函数 数组指定位置删除 是删除了元素,问题的根本原因是TC5.1不支持数组下标。
分析:
定义数组时若不指定key,TC将自动生成从0开始的key
第3行,数组没变,下标与key一致;
第4、5行,删除位置0的元素后的数组,可见元素真的被删除了;
第6行,由a[1]=1可见,方括号[]内的不是下标,而是key!(以下用按key访问的格式描述)
第7、8行,删除位置1的元素后的数组,这里的“位置”才是TC4.x版所说的“下标”;
第9行,此时p=2,而a["2"]刚被删除,此时访问一个不存在的元素,TC就在数组的末尾自动增加了key="2"的元素,其值为null。循环到此结束。
第11行,这里又访问了不存在的数组元素a["0"],TC再次新增一个key=0,值=null的元素。
第12-15行,访问的数组元素都存在了。
结论:
TC5.1的数组实际上只有按key访问一种,所谓的按下标访问其实是通过自动生成的key访问数组,只不过格式上少了双引号""而已。
引发的问题:
因为TC数组摒弃了下标,首先是使用上不方便(特别是旧程序移植),而且没有“越界”检查,这时访问了错误的元素也不知道。
尽管数组通过key访问有其优势,但希望官方能保留数组的下标访问方式,并且帮助文档能有更详细的说明。
|