標籤:web開發 asp 數組
在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中靜態數組與動態數組的用法