ASP中定義數(shù)組方法分享
本文主要提供給大家分享的是關(guān)于ASP中定義數(shù)組的方法,希望能夠給大家?guī)韼椭騿l(fā)。
[注意:本文提到的數(shù)組是Visual Basic中數(shù)組的定義,對asp編程有一定的參考價值!]
數(shù)組是有序數(shù)據(jù)的集合。數(shù)組中的元素可以不屬于同一個數(shù)據(jù)類型。用一個統(tǒng)一的數(shù)組名和下標來唯一地確定數(shù)組中的元素,更改其中一個元素并不會影響其它元素。數(shù)組的下標是有界的,分為下界和上界。數(shù)組可以用Dim、Private、Public或Static來聲明,它們的語法格式相同。下面只介紹用Dim聲明數(shù)組的方法。
1.?dāng)?shù)組的定義與聲明
數(shù)組的定義語法如下:
Dim 數(shù)組名( [[下標下界 To ] 下標上界] ) [As 數(shù)據(jù)類型]
例如(假設(shè)在當(dāng)前模塊中 數(shù)組的缺省下界為0)):
① Dim A(10) As Integer
表示數(shù)組名為A,此數(shù)組下標下界為缺省值0,下標上界為10,有11個Integer類型的元素,從A(0)、A(1)到A(10)。
② Dim B(1 To 20) As Integer
表示數(shù)組名為B,此數(shù)組下標下界為1,下標上界為20,有20個Integer類型的元素,從B(1)到B(20)。
③Dim DayArray(50)
表示DayArray 是一個有 51 個索引(從 0 到 50)元素的 Variant 數(shù)組。
④Dim Matrix(3, 4) As Integer
表示Matrix 是一個二維 Integer 數(shù)組。
⑤Dim MyMatrix(1 To 5, 4 To 9, 3 To 5) As Double
表示MyMatrix 是一個顯式指定了上下界的三維 double 數(shù)組。
⑥D(zhuǎn)im BirthDay(1 To 10) As Date
表示BirthDay 是一個索引從 1 到 10 的 Date型 數(shù)組。
2.Option Base 語句
Option Base 語句在模塊級別中使用,用來聲明數(shù)組下標的缺省下界。
Option Base 語句的語法如下:
Option Base {0 | 1}
說明:缺省狀態(tài)下數(shù)組下界為 0,此時無需使用 Option Base 語句。如果使用該語句規(guī)定數(shù)組下界1,則必須在模塊的數(shù)組聲明之前使用Option Base 語句。
注意:
(1)Dim、Private、Public、ReDim 以及 Static 語句中的 To 子句提供了一種更靈活的方式來控制數(shù)組的下標。不過,如果沒有使用 To 子句顯式地指定下界,則可以使用 Option Base 將缺省下界設(shè)為 1。使用 Array 函數(shù)創(chuàng)建的數(shù)組的下界也受 Option Base 語句指定的下界的決定, 除非 Array 是由類型庫(例如 VBA.Array )名稱限定,如果是由類型庫名稱限定,則 使用Array 函數(shù)創(chuàng)建的數(shù)組的下界不受 Option Base 的影響。
(1) Option Base 語句只影響位于包含該語句的模塊中的數(shù)組下界。
關(guān)于數(shù)組聲明的幾點說明:
①數(shù)組名命名規(guī)則和變量名的相同。
②數(shù)組名后是用圓括弧括起來的,不能用方括弧,不同于C語言。
③下標的下界必須不能大于其上界。
④可以用變量名或常數(shù)名(以及實數(shù))作下標的邊界。當(dāng)下標的邊界是常數(shù)名時,數(shù)組的大小固定,當(dāng)下標的邊界是變量名時,數(shù)組的大小可作動態(tài)定義,即數(shù)組的大小取決于程序運行過程中變量的值。因此,VB 中數(shù)組又可以分為兩種數(shù)組:靜態(tài)數(shù)組、動態(tài)數(shù)組。
3.靜態(tài)數(shù)組
靜態(tài)數(shù)組是指數(shù)組元素的個數(shù)是固定不變的,即它們占用的內(nèi)存空間大小是固定不變的。根據(jù)固定大小數(shù)組的維數(shù)不同,可以將它分為一維數(shù)組和多維數(shù)組。
聲明多維數(shù)組的語法格式為:
Dim 數(shù)組名([下標邊界列表]) [As 數(shù)據(jù)類型]
下標邊界的定義形式:[下標下界 To]下標上界
下標邊界列表指用逗號分開的數(shù)組各維的下標邊界,即
[下標下界 To]下標上界,[下標下界 To]下標上界,……,[下標下界 To]下標上界
(第一維) (第二維) (第n維)
當(dāng)n=1時,數(shù)組稱作一維數(shù)組;當(dāng)n=2時,數(shù)組稱作二維數(shù)組;依次類推,當(dāng)n=m時,數(shù)組稱作m維數(shù)組。
下面舉例介紹一維數(shù)組的使用。
’聲明一個長度為51的字符串?dāng)?shù)組FriendsName
Dim FriendsName(50) As String
’聲明一個長度為11的全局整型數(shù)組Class
Public Class(10) As Integer
一維數(shù)組中的元素個數(shù)為(上界-下界+1)。
為數(shù)組賦初值可以采用循環(huán)語句,如:
Dim I As Integer
For I = 0 To 11 ’循環(huán)語句的使用程序流程的控制
C(I) = I
Next I
如果不顯式指定下標下界,則數(shù)組的下標下界由 Option Base 語句控制。如果沒有 Option Base 語句則下界為默認為 0。
數(shù)組的維數(shù)并不限于2,在VB中,可以擴大至于60,在實際應(yīng)用上對三維以上的數(shù)組的應(yīng)用是不多的。定義一個多維數(shù)組時只需一條Dim語句指定數(shù)組的所有下標邊界即可,使用多維數(shù)組的可以很方便的表示一些有意義的統(tǒng)計數(shù)據(jù)。例如:
Dim Profit(16,10,12) As Currency
這個Profit數(shù)組可用來表示以店名、部門及月份為參數(shù)的某百貨公司的利潤。如:Profit(2,8,11)代表了第二分店的第八部門在11月份的利潤。
4.動態(tài)數(shù)組
有時在數(shù)組開始使用前,不能知道需要多大的數(shù)組才能滿足實際需要。當(dāng)然可以把數(shù)組的大小定義到足夠大來滿足任意的實際應(yīng)用需要,這種方法效率很低(大量浪費內(nèi)存空間)。如果使用動態(tài)數(shù)組,就可以在程序運行時根據(jù)實際需要,精確定義數(shù)組的大小。
在聲明數(shù)組時,不給出維數(shù)列表就是將數(shù)組聲明為動態(tài)數(shù)組。例如:
Dim MyArry() As Integer
在使用動態(tài)數(shù)組前,必須使用ReDim語句把它重新定義。如前面聲明的數(shù)組MyArry,可以用以下語句將它定義為一個動態(tài)二維數(shù)組。
ReDim MyArry(10,10)
還可以通過重復(fù)執(zhí)行ReDim語句,多次定義動態(tài)數(shù)組。使用ReDim最多能定義數(shù)組的維數(shù)是60。ReDim語句可以改變數(shù)組每維的元素個數(shù),但不能改變維數(shù)。下面是對ReDim語句的一個標準應(yīng)用舉例。
Dim MyArry() As Single ‘聲明動態(tài)數(shù)組
ReDim MyArry(30,20,10) ‘重新定義數(shù)組
ReDim MyArry(50,23,21) ‘再次重新定義數(shù)組
ReDim的語法與Dim的相同,此外,它還有選擇項Preserve關(guān)鍵詞:
ReDim Preserve 數(shù)組名 ([ [下標下界 To]下標上界]) [As 數(shù)據(jù)類型]
例如:
ReDim MyArry(50,23,21)
ReDim Preserve MyArry(50,23,50)
注意:使用ReDim 時,重新定義數(shù)組會使所有數(shù)組元素的值消失,而使用Preserve可以保留數(shù)據(jù)。但是用Preserve只能在改變數(shù)組的最后一維的大小時,保留數(shù)組的數(shù)據(jù)。對于一維數(shù)組來說,所有數(shù)據(jù)都會保留,而對于多維數(shù)組:只能改變最后一維的大小,才能保留全部數(shù)組數(shù)據(jù),否則出錯。
5.LBound 函數(shù)和UBound 函數(shù)
LBound 函數(shù)和Ubound函數(shù)都是返回一個 Long 型數(shù)據(jù),前者得到的值為指定數(shù)組維可用的最小下標,而后者得到的是最大下標。它們的語法為:
LBound(數(shù)組名[, 指定的維數(shù)])
UBound(數(shù)組名[, 指定的維數(shù)])
其中數(shù)組名是必選的。指定的維數(shù)是可選的,表明指定返回哪一維的下界。1 表示第一維,2 表示第二維,如此類推。如果省略指定的維數(shù),就默認為是 1。
關(guān)于如何使用LBound 函數(shù)與 UBound 函數(shù)可參見下例:
Dim A(1 to 100,3,-3 to 4) As Integer ’定義一三維數(shù)組,假定沒有使用Option Base 語
’句改變數(shù)組下界的默認值。
對數(shù)組A使用Lbound 和Ubound函數(shù),其返回值列表如下
所有維的缺省下界取決于 Option Base 語句的設(shè)置?梢钥闯鰧σ粩(shù)組使用LBound 函數(shù)與 UBound 函數(shù),可用于確定一個數(shù)組中元素的個數(shù)。
對于那些在聲明中用 To 子句來設(shè)定維數(shù)的數(shù)組而言,它們可以用任何整數(shù)作為下界而不受Option Base 語句的限制。
6.?dāng)?shù)組的高級功能
盡管數(shù)組最通常被用來存儲成組的變量,但是在別的一些方面數(shù)組也是很有用的?梢詫⒁粋數(shù)組的內(nèi)容賦值給另一個數(shù)組、創(chuàng)建返回數(shù)組的函數(shù),還可以創(chuàng)建返回數(shù)組的屬性。在許多情況下,這些技術(shù)能改進應(yīng)用程序的性能。
正如可以將一個變量的值賦給另一個變量,例如 StrA = StrB ,也可以將一個數(shù)組的內(nèi)容賦給另一個數(shù)組。例如,要將一字節(jié)型數(shù)組從一個位置復(fù)制到另一個位置?梢酝ㄟ^每次復(fù)制一個字節(jié)來實現(xiàn),程序如下:
Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte)
‘參數(shù)oldCopy()是源數(shù)組,newCopy()是目標數(shù)組
Dim i As Integer
ReDim newCopy (Lbound(oldCopy) To UBound(oldCopy)) ’重新定義動態(tài)數(shù)組
For i = Lbound(oldCopy) To Ubound(oldCopy) ’循環(huán)賦值
newCopy(i) = oldCopy(i)
Next
End Sub
一個更有效的簡單的方法就是直接將一個數(shù)組賦給另外一個數(shù)組:
Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte)
‘參數(shù)oldCopy()是源數(shù)組,newCopy()是目標數(shù)組
newCopy = oldCopy ’利用數(shù)組直接進行賦值
End Sub
關(guān)于變量賦值有一些規(guī)則需要銘記。