本文所說的 ASP 數組是指在 ASP 中以預設語言 VBScript 為語言的數組。
例子:
Dim MyArray()
for i = 0 to 10
ReDim Preserve MyArray(i)
MyArray(i)=i
next
下標
- ASP 數組的下標也是從 0 開始的。
- 要擷取某個元素的值則在陣列變數後面加上括弧,括弧中標明下標值,比如 arr(0),注意不是中括弧,而是小括弧。
定義
dim arr() '定義動態數組
dim arr2(2) '定義靜態數組
在變數名稱後面加上括弧,就形成了數組。如果括弧中指定了數值,就表示定義一個靜態數組,即固定大小的數組。
代碼中
- arr() 定義一個動態數組,需要重定義確定長度後才能使用,關於重定義請參見後面。
- arr2(2) 定義一個下標上限是
2(長度為 3)的靜態數組,這與其他語言(比如 C#、JavaScript)有所不同,其他語言的括弧中參數表示長度。
erase
erase 動態數組時釋放動態數組的儲存空間;erase 靜態數組時,只是初始化數組的元素值。
dim arr()
redim arr(2)
erase arr
alert(ubound(arr)) '錯誤,erase
已經將動態數組的儲存空間全部釋放。
dim arr(1)
erase arr
alert(ubound(arr)) '顯示
1,erase 只是初始化靜態數組的元素值,其佔用的空間還在。
重定義 redim
對於動態數組,可以重定義,重定義之後也可以繼續重定義;不能對靜態數組進行重定義。
dim arr()
dim arr2(2)
dim arr3()
redim arr(0) '將數組 arr 的下標上限設為 0(長度為 1)。
redim arr2(1) '發生錯誤。
redim arr3(-1) '正確,可以設定為
-1,以表示這個數組長度為 0。
如上重定義數組將導致該數組原有賦值丟失。
重定義 redim preserve
前面講到重定義數組將導致該數組原有賦值丟失,怎麼能保證不丟失呢?用 redim preserve。
dim arr()
redim arr(1)
arr(0) = "1"
alert(arr(0)) '顯示 1
redim preserve arr(2)
alert(arr(0)) '仍然顯示 1
UBound
ASP
數組沒有擷取長度的屬性或方法,只有擷取下標上限的方法-UBound(數組名稱),即數組下標的最大值,比如 UBound(arr)。
dim arr(1)
Response.Write(UBound(arr)) ' 顯示上限 1,數組長度為 2
dim arr2()
redim arr2(-1) ' 可以為動態數組 redim 上限為 -1,但不能為其他負數,比如 -2 就會報“記憶體不夠”。
Response.Write(UBound(arr2)) ' 顯示上限 -1,數組長度為 0
dim arr3()
'Response.Write(UBound(arr3)) ' 發生錯誤
Split
Split 將字串分隔為數組,如下 arr2 是錯誤的。
dim arr
dim arr2() '錯誤,這裡不能有括弧。
arr = Split("1,2,3", ",")
arr2 = Split("1,2,3", ",")Dim MyArray()
for i = 0 to 10
ReDim Preserve MyArray(i)
MyArray(i)=i
next 例子:Dim MyArray()
for i = 0 to 10
ReDim Preserve MyArray(i)
MyArray(i)=i
next 例子: