|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我想详细了解ASP整站代码与PSP整站代码有什么优缺点,那个更好,更安全,更用容易维护,和管理。。。技能|数组[注重:本文提到的数组是VisualBasic中数组的界说,对asp编程有必定的参考代价!]
数组是有序数据的汇合。数组中的元素能够不属于统一个数据范例。用一个一致的数组名和下标来独一地断定数组中的元素,变动个中一个元素其实不会影响别的元素。数组的下标是有界的,分为下界和上界。数组能够用Dim、Private、Public或Static来声明,它们的语法格局不异。上面只先容用Dim声明数组的办法。
1.数组的界说与声明
数组的界说语法以下:
Dim数组名([[下标下界To]下标上界])[As数据范例]
比方(假定在以后模块中数组的缺省下界为0)):
①DimA(10)AsInteger
暗示数组名为A,此数组下标下界为缺省值0,下标上界为10,有11个Integer范例的元素,从A(0)、A(1)到A(10)。
②DimB(1To20)AsInteger
暗示数组名为B,此数组下标下界为1,下标上界为20,有20个Integer范例的元素,从B(1)到B(20)。
③DimDayArray(50)
暗示DayArray是一个有51个索引(从0到50)元素的Variant数组。
④DimMatrix(3,4)AsInteger
暗示Matrix是一个二维Integer数组。
⑤DimMyMatrix(1To5,4To9,3To5)AsDouble
暗示MyMatrix是一个显式指定了高低界的三维double数组。
⑥DimBirthDay(1To10)AsDate
暗示BirthDay是一个索引从1到10的Date型数组。
2.OptionBase语句
OptionBase语句在模块级别中利用,用来声明数组下标的缺省下界。
OptionBase语句的语法以下:
OptionBase{0|1}
申明:缺省形态下数组下界为0,此时无需利用OptionBase语句。假如利用该语句划定数组下界1,则必需在模块的数组声明之前利用OptionBase语句。
注重:
(1)Dim、Private、Public、ReDim和Static语句中的To子句供应了一种更天真的体例来把持数组的下标。不外,假如没有利用To子句显式地指定下界,则可使用OptionBase将缺省下界设为1。利用Array函数创立的数组的下界也受OptionBase语句指定的下界的决意,除非Array是由范例库(比方VBA.Array)称号限制,假如是由范例库称号限制,则利用Array函数创立的数组的下界不受OptionBase的影响。
(1)OptionBase语句只影响位于包括该语句的模块中的数组下界。
关于数组声明的几点申明:
①数组名定名划定规矩和变量名的不异。
②数组名后是用圆括弧括起来的,不克不及用方括弧,分歧于C言语。
③下标的下界必需不克不及年夜于其上界。
④能够用变量名或常数名(和实数)作下标的界限。当下标的界限是常数名时,数组的巨细流动,当下标的界限是变量名时,数组的巨细可作静态界说,即数组的巨细取决于程序运转过程当中变量的值。因而,VB中数组又能够分为两种数组:静态数组、静态数组。
3.静态数组
静态数组是指数组元素的个数是流动稳定的,即它们占用的内存空间巨细是流动稳定的。依据流动巨细数组的维数分歧,能够将它分为一维数组和多维数组。
声明多维数组的语法格局为:
Dim数组名([下标界限列表])[As数据范例]
下标界限的界说情势:[下标下界To]下标上界
下标界限列表指用逗号分隔的数组各维的下标界限,即
[下标下界To]下标上界,[下标下界To]下标上界,……,[下标下界To]下标上界
(第一维)(第二维)(第n维)
当n=1时,数组称作一维数组;当n=2时,数组称作二维数组;顺次类推,当n=m时,数组称作m维数组。
上面举例先容一维数组的利用。
’声明一个长度为51的字符串数组FriendsName
DimFriendsName(50)AsString
’声明一个长度为11的全局整型数组Class
PublicClass(10)AsInteger
一维数组中的元素个数为(上界-下界+1)。
为数组赋初值能够接纳轮回语句,如:
DimIAsInteger
ForI=0To11’轮回语句的利用程序流程的把持
C(I)=I
NextI
假如不显式指定下标下界,则数组的下标下界由OptionBase语句把持。假如没有OptionBase语句则下界为默许为0。
数组的维数其实不限于2,在VB中,能够扩展至于60,在实践使用上对三维以上的数组的使用是未几的。界说一个多维数组时只需一条Dim语句指定命组的一切下标界限便可,利用多维数组的能够很便利的暗示一些成心义的统计数据。比方:
DimProfit(16,10,12)AsCurrency
这个Profit数组可用来暗示以店名、部门及月份为参数的某百货公司的利润。如:Profit(2,8,11)代表了第二分店的第八部门在11月份的利润。
4.静态数组
偶然在数组入手下手利用前,不克不及晓得必要多年夜的数组才干满意实践必要。固然能够把数组的巨细界说到充足年夜来满意恣意的实践使用必要,这类办法效力很低(大批华侈内存空间)。假如利用静态数组,就能够在程序运转时依据实践必要,准确界说数组的巨细。
在声明数组时,不给出维数列表就是将数组声明为静态数组。比方:
DimMyArry()AsInteger
在利用静态数组前,必需利用ReDim语句把它从头界说。如后面声明的数组MyArry,能够用以下语句将它界说为一个静态二维数组。
ReDimMyArry(10,10)
还能够经由过程反复实行ReDim语句,屡次界说静态数组。利用ReDim最多能界说数组的维数是60。ReDim语句能够改动数组每维的元素个数,但不克不及改动维数。上面是对ReDim语句的一个尺度使用举例。
DimMyArry()AsSingle‘声明静态数组
ReDimMyArry(30,20,10)‘从头界说数组
ReDimMyArry(50,23,21)‘再次从头界说数组
ReDim的语法与Dim的不异,别的,它另有选择项Preserve关头词:
ReDimPreserve数组名([[下标下界To]下标上界])[As数据范例]
比方:
ReDimMyArry(50,23,21)
ReDimPreserveMyArry(50,23,50)
注重:利用ReDim时,从头界说数组会使一切数组元素的值消散,而利用Preserve能够保存数据。可是用Preserve只能在改动数组的最初一维的巨细时,保存数组的数据。关于一维数组来讲,一切数据城市保存,而关于多维数组:只能改动最初一维的巨细,才干保存全体数组数据,不然堕落。
5.LBound函数和UBound函数
LBound函数和Ubound函数都是前往一个Long型数据,前者失掉的值为指定命组维可用的最小下标,尔后者失掉的是最年夜下标。它们的语法为:
LBound(数组名[,指定的维数])
UBound(数组名[,指定的维数])
个中数组名是必选的。指定的维数是可选的,标明指定前往哪一维的下界。1暗示第一维,2暗示第二维,云云类推。假如省略指定的维数,就默许为是1。
关于怎样利用LBound函数与UBound函数可拜见下例:
DimA(1to100,3,-3to4)AsInteger’界说一三维数组,假定没有利用OptionBase语
’句改动数组下界的默许值。
对数组A利用Lbound和Ubound函数,其前往值列表以下
一切维的缺省下界取决于OptionBase语句的设置。能够看出对一数组利用LBound函数与UBound函数,可用于断定一个数组中元素的个数。
关于那些在声明顶用To子句来设定维数的数组而言,它们能够用任何整数作为下界而不受OptionBase语句的限定。
6.数组的初级功效
只管数组最一般被用来存储成组的变量,可是在其余一些方面数组也是很有效的。能够将一个数组的内容赋值给另外一个数组、创立前往数组的函数,还能够创立前往数组的属性。在很多情形下,这些手艺能改善使用程序的功能。
正如能够将一个变量的值赋给另外一个变量,比方StrA=StrB,也能够将一个数组的内容赋给另外一个数组。比方,要将一字节型数组从一个地位复制到另外一个地位。能够经由过程每次复制一个字节来完成,程序以下:
SubByteCopy(oldCopy()AsByte,newCopy()AsByte)
‘参数oldCopy()是源数组,newCopy()是方针数组
DimiAsInteger
ReDimnewCopy(Lbound(oldCopy)ToUBound(oldCopy))’从头界说静态数组
Fori=Lbound(oldCopy)ToUbound(oldCopy)’轮回赋值
newCopy(i)=oldCopy(i)
Next
EndSub
一个更无效的复杂的办法就是间接将一个数组赋给别的一个数组:
SubByteCopy(oldCopy()AsByte,newCopy()AsByte)
‘参数oldCopy()是源数组,newCopy()是方针数组
newCopy=oldCopy’使用数组间接举行赋值
EndSub
关于变量赋值有一些划定规矩必要铭刻。比方,固然能够将一个声明为整型的变量赋给一个声明为长整型的变量而不会发生任何成绩,可是将一个长整型变量赋给一个整型变量就很简单招致溢堕落误。除恪守有关数据范例变量之间赋值时的划定规矩外,数组赋值还要服从别的一些划定规矩,包含数组维数,每维的巨细,和数组是流动的仍是静态的。
①维数、数据范例分歧的数组赋值思索的几个要素
l赋值符右边的数组范例:流动数组(Dimx(1to10)AsInteger)大概静态数组(Dimx()AsInteger)。
l赋值符右边数组的维数是不是和赋值符右侧数组的维数婚配。
l赋值符双方数组的每维的数组元素个数是不是婚配。即便数组的声明分歧,维数也大概婚配。好比一个数组的每维元素从0入手下手编号而另外一个则从1入手下手,维数也大概婚配。
l赋值符双方一切元素的数据范例必需是相容的。这些划定规矩和变量赋值的划定规矩是分歧的。
表3-6显现了这些要素的影响:
数组赋值时的毛病大概产生在编译时,也大概产生在运转时(比方,假如数据范例不克不及强迫转换或赋值试图从头声明(ReDim)一个静态数组)。计划程序时要增加毛病处置以确保数组在赋值之前是婚配的。
②编写前往数组的函数
从一个函数前往一组值是大概完成的。比方,从一个函数前往一组字节而不用将其先转换为一个字符串然后再转换返来。
上面是一个利用前往字节数组的函数的复杂示例:
PrivateSubForm_Load()
DimbAsByte
DimiAsInteger
DimReturnArray()AsByte
b=Cbyte(54)
ReturnArray()=ArrayFunction(b)’挪用函数
Fori=Lbound(ReturnArray)ToUbound(ReturnArray)
MsgboxReturnArray(i) ’经由过程弹出动静框轮回显现数组值
Next
EndSub
PublicFunctionArrayFunction(bAsByte)AsByte()
Dimx(2)AsByte
x(0)=b
x(1)=b+CByte(200)
x(2)=b+b
ArrayFunction=x’前往了局为数组x
EndFunction
在运转以上示例后,ReturnArray()是一个三元素数组,个中包括了分派给ArrayFunction中数组的值。ArrayFunction语句将一个数组作为参数传送;且数组的数据范例必需和函数的数据范例不异(在本例中是字节)。由于这是一个函数挪用,传送数组时不用带括号。
注重:
1.只管能够经由过程赋值给另外一个数组(ArrayFunction=x())来前往一个数组,但出于功能方面的思索,其实不保举利用这类办法。
2.必需为前往数组的函数指定一个范例,这个范例能够是Variant。如许一来,FunctionX()AsVariant()是无效的而FunctionX()As()将失利。
3.当挪用一个前往数组的函数时,用来保留前往值的变量也必需是一个数组,并且其数据范例必需和函数前往范例不异,不然将显现一个“范例不婚配”的毛病。写软件都是想的时间比写的时间要长的.如果反过来了就得看看是什么原因了.另外大家可以回去问问公司里的小MM.(一般企业里,跟你们交付软件接触得最多的是她们) |
|