Bootstrap

按键精灵什么是动态数组?如何使用动态数组?(新手进阶)

前言

如果你没有编程基础,对数组还没什么了解,建议不要学习本帖知识,先学习了解数组的基本知识。对数组有基本了解往下看,
直入主题,什么是动态数组?怎么用?概念上的东西不多说了,看例子!

正文

// 什么是动态数组?什么时候用?有什么用看例子:
//
// 定义数组:Dim 数组名(下标),数组长度已被锁定!

Dim GG(3) //定义一个数组GG,下标为3,数组元素数为4(公式:数组下标+1=数组中元素个数)
GG(0)=8
GG(1)=3
GG(2)=4
GG(3)=6

// 上面是数组的定义与赋值,GG(4)是不存在的,下标最大值是3,不可能有GG(4),如果代码使用GG(4)那就叫下标越界!
//【假设】如果我想给这个数组下标扩大!GG(4)=1,GG(5)=0,如何加进去?
//【错解】直接添加GG(4)=1,GG(5)=0
//【正解】不可以直接添加!因原数组长度已被锁定。动态数组就用在此时!

Dim 新数组() '定义新数组,长度未锁定所以括号里不写下标值,本行可省略
For 计数 = 0 To UBound(GG)
ReDim Preserve 新数组(计数)
TracePrint UBound(新数组) '返回新数组长度
新数组(计数)=GG(计数)
Next
ReDim Preserve 新数组(5) //循环结束,新数组长度为3,而我们要将其变成5,该行不可省!
新数组(4) = 1
新数组(5) = 0 //是不是搞定了呢?测试一下是否成功了?!激动ing

//0ReDim Preserve 新数组(100) //删除本行首的“//0”再执行会发现数组长度再次被改变,不会报错
MessageBox Join(新数组, “|”) '弹出结果,方便我们分析
//
// 综上所述,已被定义的数组,已确定其下标则长度会被锁定,不可以再改变其长度,不能添加新元素。如需要扩大下标添加新元素的情况须使用动态数组!
// 动态数组的声明方式为: ReDim 数组名(新下标),如果需要保留原数组元素,那么需要添加Preserve,写法即:ReDim Preserve 数组名(新下标)

引申
上文只对一维数组动态数组的使用做了介绍,多维的情况不多做讨论,感觉用的不多,印象里多维的规则是只可以改变最后一维的下标!!有兴趣的自己找资料看看

实例

课题:现用户要求按一次键存入一次按键码,每次记录按键码最后以换行排列?
说明:动态数组用在类似的课题中,非常方便!用户按键次数是未知的(即数组长度未知)
实现:

下标=0 '给数组下标赋初值
Do
相识 = WaitKey() '存入按键码
ReDim Preserve 数组(下标) '动态数组,改变数组长度或说改变下标
数组(下标) = 相识
下标=下标+1 '下标自增
Loop
Sub OnScriptExit()
MessageBox Join(数组, vbcrlf)
End Sub
;