一、数组
1、一维数组
2、二维数组
(一)选择排序:每次选择所要排序的数组中最大值(由小到大排序则选择最小值)的数组元素,将这个数组元素的值与前面的数组元素的值互换。
数组为:a(1)=3、a(2)=2、a(3)=7、a(4)=9、a(5)=5
for i as long,j as long,n as long
for i=1 to 4
for j=n to 5
if a(i) < a(j) then
n=a(i)
a(i)=a(j)
a(j)=n
end if
next j
next i
(二)冒泡排序:在排序时,每次比较数组中相邻的两个数组元素的值,将较大的排在较小的前面。
数组为:a(1)=3、a(2)=2、a(3)=7、a(4)=9、a(5)=5
for i=1 to 4
for j=0 to 3
if a(j) < a(j+1) then
n=a(j)
a(j)=a(j+1)
a(j)=n
end if
next j
next i
(三)二分法排序:如果数组很小,使用上面的方法可行;但数组较大时,一个一个比较将浪费大量的时间。对于数组元素的取值有顺序(由小到大或由大到小等)的数组,可以采用二分法查找数组元素。二分法是将所有要查询的数值,先与位于数组中间的数组元素进行比较,根据比较结果在对前一半或后一半进行查找,然后继续取前一半或后一半中间的数组元素与查询的数值循环进行比较,直到查询到符合条件的结果。
dim myarray(100) as integer '声明数组
private sub command_click()
dim low,high,mid as integer
dim found as boolean
low=0 '设置初始值
high=ubround(myarray)
found=false
mid=(high+low)/2 '计算中间值
do while not found and (high >= low) '当没找到并且high值大于等于low值时
if cint(text1.text) = myarray( mid) then '当输入的查询值与myarray(mid)相等时
found=true
msgbox(mid) '显示数组元素的下标
msgbox(myarray(mid)) '显示数组元素的值
exit do '跳出循环
elseif cint(text1.text) < myarray(mid) then '当输入的查询值小于myarray(mid)时
high = mid -1
else
low=mid +1
end if
mid=(high+low)/2
loop
end sub
private sub form_load()
dim i as integer
for i =1 to ubound(myarray) '遍历数组元素
myarray(i) = i+5 '设置数组元素
print myarray(i) '显示元素值
next
end sub
二、控件数组
1、定义:是一组相同类型的控件,是使用相同名称并共享同一过程的集合。这个控件集合中的每一个控件,都可以称为该控件数组中的数组元素。
在创建控件数组时,系统会给这个控件数组中每一个控件唯一的索引(index),即下标,这个索引的作用是用来区分控件数组中不同的控件。
2、创建控件数组
(1) 复制粘贴法:先添加一个控件,然后进行复制,在弹出的对话框中确定(弹出:创建一个控件数组吗?),直到添加完所需要的控件数组元素为止。
(2)设置控件Name属性:通过将同类型控件name属性设置为相同名称也可以创建控件数组。
三、数组相关函数及语句
1、array函数:可以创建一个数组,并返回一个variant数据类型的变量。
格式: array(arglist)
arglist:一个数值表,各数值间用“.”分开。这些数值是用来给数值元素赋值的。当arglist中没有任何参数时,则创建一个长度为0的数组。
如:
dim A as variant
a=array(45,2,6,7) 'A中包含4个数组元素,各元素的值为:45,2,6,7
注意:数组A中的第一个元素是A(0),使用array函数创建的数值只能是variant数据类型,返回的变量也只能是variant型,如果这个变量不是variant型,VB将产生类型不匹配的错误。
2、ubound、lbound
ubound函数:返回指定数组中的指定维数可用的最大下标,返回值为long型。
lbound函数:返回指定数组中的指定维数可用的最小下标,返回值为long型。
dim a(1 to 100)
MsgBox UBound(a) '返回结果为100
MsgBox LBound(a) '返回结果为1
3、split函数:返回一个下标从0开始的一维数组,此一维数组中包含了指定数目的子字符串。
格式: split(表达式,字符,count,compare)
(1)表达式:必要参数。包含子字符串和分隔符的字符串表达式。如果表达式是一个长度为0的字符串(""),split则返回一个空数组,即没有元素和数据的数组。
(2)字符:可选参数。用于标识子字符串边界的字符串字符。如果忽略,则使用空格字符("")作为分隔符。如果字符是一个长度为0的字符串,则返回的数组仅包含一个元素,即完整的表达式字符串。
(3)count:可选参数。要返回的子字符串数,-1表示返回所有的子字符串。
(4)compare:可选参数。数字值。表示判别子字符串时使用的比较方式。值如下。
①常数:vbusecompare,值-1,即为用option compare语句中的设置值执行比较
②常数:vbbinarycompare,值0,即为执行二进制比较
③常数:vbtextcompare,值1,即为执行文字比较
④常数:vbdatabasecompare,值2,即为仅用于access
Dim a
Private Sub Command1_Click()
Dim i As Long
For i = 0 To 2
Text1.Text = Text1.Text & vbCrLf & a(i)
Next i
End Sub
Private Sub Form_Load()
a = Split("abc.def.ghi", ".", -1, 1)
End Sub
在text1显示结果为:
abc
def
ghi
4、option base:用来指定声明数组时下标下界省略时的默认值。
是模块中使用的语句。一个模块中只能出现一次,语句必须写在模块的所有过程之前,而且必须位于带维数的数组声明之前。只对该语句所有模块中的数组下界有影响。
语法:option baase [0 | 1]
[0 | 1]:设置数组下标中下界省略时的默认值。一般情况下数组的下标下界省略的默认值为0
例,在声明数组之前使用该语句将下标中默认值设置为1后,声明数组A:
option base 1
dim a(4) as long
数组A中的元素分别为:A(1)、A(2)、A(3)、A(4)