您的位置:首页 > 编程语言 > ASP

WEB开发教程--ASP中静态数组与动态数组的用法

2015-06-28 11:56 531 查看
在ASP中,数组是具有相同名字的一组变量,数组中包含多个元素,由不同的下标值区分数组的各个元素。在VBScript中,数组有两种类型:静态数组和动态数组。

1、静态数组

静态数组在编译时开辟内存区,数组大小在运行时不可改变。

定义一个一维数组mmArray(3)

Dim mmArray(3)

mmArray(0)=1

mmArray(1)=3

mmArray(2)=5

mmArray(3)=7

其中mmArray是数组名,数组的下界为0,上界为3,数组元素从mmArray(0)到mmArray(3),共有4个元素。

也可以这样定义:

Dim MyArray

MyArray=Array(1,3,5,7)

n=10

Dim MyArray(n) ‘这样定义数组错误

定义静态数组,必须确定数组的上界,数组的上界不能为变量。因为静态数组是在编译时就开辟内存区的。

2、动态数组

动态数组是运行时大小可变的数组。当程序没运行时,动态数组不占内存,在程序运行时才开辟内存。

动态数组的定义一般分两步:

首先,用Dim语句声明一个括号内不包含下标的数组。

然后,在使用数组之前用ReDim语句根据实际需要重新定义下标值。

也可以用Redim语句直接定义数组。例如

ReDim a(2)

a(0)=1

a(1)=2

a(2)=3

ReDim语句的格式为:ReDim [Preserve] 变量(下标)

例如定义动态数组arrOrg

Dim arrOrg()

ReDim arrOrg(3)’在使用arrOrg之前,必须用ReDim语句分配实际的元素个数

可以用ReDim不断改变元素数目

Dim ArrOrg()

ReDim arrOrg(3)

ReDim arrOrg(5)

ReDim arrOrg(2)

每次执行ReDim语句时,存储在数组中的当前值都会全部丢失。如果希望改变数组大小而又不丢失数组中的数据,要使用关键字Preserve。

<%

ReDim a(2)

a(0)=1

a(1)=2

a(2)=3

ReDim Preserve a(1)

a(1)=9

For n=0 To UBound(a)

Response.Write a(n) & “


Next

%>

ReDim Preserve arrOrg(Ubound(arrOrg)+1)

以上代码将数组扩大一个元素,现有元素值不变。Ubound()函数返回数组的上界。

注意:在用ReDim语句重新定义数组时,只能改变数组元素的个数,而不能改变数组的维数。

3、为什么要使用动态数组?

当程序没运行时,动态数组不占内存,在程序运行时才开辟内存。

动态数组是运行时大小可变的数组。

使用动态数组的优点是可以根据用户需要,有效利用存储空间。

如果你将某数据存入数组中,在不确定有多少个的情况下,使用动态数组将是非常好的办法。

比如,有1亿个数据。其中仅需100个符合要求的数据放到数组中。选用动态数组的方法将是明智的。

下例将1000内被54整除的数放到某数组中。

Dim MyArray()’声明一个括号内不包含下标的数组。

Dim i,j

j=0

For i=0 To 1000

IF i Mod 54=0 Then

ReDim Preserve MyArray(j)

MyArray(j)=i

j=j+1

End IF

Next

‘输出

Response.Write “1000内被54整除的数共有:” & Ubound(MyArray)+1 & “个,分别是:


For i=0 to Ubound(MyArray)

Response.Write MyArray(i) & “


Next

这个例子说明,你不确定数组元素个数,但如果你直接定义Dim MyArray(1000),是极其愚蠢的。

一是这样定义将浪费存储空间。本例中实际需要的数组元素为19个

二是这样的代码执行效率低,造成资源浪费。比如对这元素重新排序。直接定义Dim MyArray(1000),将要遍历1000次。

可扩展数组,程序代码如下

Dim MyArray()

For i=0 To 10

ReDim Preserve MyArray(i)

MyArray(i)=i

Next

将一个字符串分割并返回分割结果的数组,程序代码如下

Dim tmpStr,MyArray

tmpStr=”1,3,5,7,9”

MyArray=Split(tmpStr,”,”)

For N=0 to Ubound(MyArray)

Response.Write MyArray(N) & “


Next

在Application和Session中使用数组(Session使用方法与Application相同)

以Application为例,将数组放到全局缓存中。程序代码如下

Application.Lock

Application(“appArray”)=MyArray

Application.Unlock

更改全局缓存数组时,必须先将全局缓存数组赋给变量,更改该变量某一元素值,然后再将该变量放到全局缓存中。而不能直接修改全局缓存某一元素而改变该元素的值。请分析以下例子:

<%

Dim MyArray,tmpArr

MyArray=array(1,2,3)

Application.Lock

Application(“appArray”)=MyArray

Application.Unlock

Response.Write Application(“appArray”)(1) & “


‘以下方法是错误的

Application.Lock

Application(“appArray”)(1)=9

Application.Unlock

Response.Write Application(“appArray”)(1) & “


‘以下方法是正确的

tmpArr=Application(“appArray”)

tmpArr(1)=9

Application.Lock

Application(“appArray”)=tmpArr

Application.Unlock

Response.Write Application(“appArray”)(1) & “


%>

结果是:

2

2

9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web开发 asp 数组