- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > ASP >
- ASP定義數組方法的技巧
數組是有序數據的集合。數組中的元素可以不屬于同一個(gè)數據類(lèi)型。用一個(gè)統一的數組名和下標來(lái)唯一地確定數組中的元素,更改其中一個(gè)元素并不會(huì )影響其它元素。數組的下標是有界的,分為下界和上界。數組可以用Dim、Private、Public或Static來(lái)聲明,它們的語(yǔ)法格式相同。下面只介紹用Dim聲明數組的方法。
1.數組的定義與聲明
數組的定義語(yǔ)法如下:
Dim 數組名( [[下標下界 To ] 下標上界] ) [As 數據類(lèi)型]
例如(假設在當前模塊中 數組的缺省下界為0)):
① Dim A(10) As Integer
表示數組名為A,此數組下標下界為缺省值0,下標上界為10,有11個(gè)Integer類(lèi)型的元素,從A(0)、A(1)到A(10)。
② Dim B(1 To 20) As Integer
表示數組名為B,此數組下標下界為1,下標上界為20,有20個(gè)Integer類(lèi)型的元素,從B(1)到B(20)。
③Dim DayArray(50)
表示DayArray 是一個(gè)有 51 個(gè)索引(從 0 到 50)元素的 Variant 數組。
④Dim Matrix(3, 4) As Integer
表示Matrix 是一個(gè)二維 Integer 數組。
⑤Dim MyMatrix(1 To 5, 4 To 9, 3 To 5) As Double
表示MyMatrix 是一個(gè)顯式指定了上下界的三維 double 數組。
⑥Dim BirthDay(1 To 10) As Date
表示BirthDay 是一個(gè)索引從 1 到 10 的 Date型 數組。
2.Option Base 語(yǔ)句
Option Base 語(yǔ)句在模塊級別中使用,用來(lái)聲明數組下標的缺省下界。
Option Base 語(yǔ)句的語(yǔ)法如下:
Option Base {0 | 1}
說(shuō)明:缺省狀態(tài)下數組下界為 0,此時(shí)無(wú)需使用 Option Base 語(yǔ)句。如果使用該語(yǔ)句規定數組下界1,則必須在模塊的數組聲明之前使用Option Base 語(yǔ)句。
注意:
(1)Dim、Private、Public、ReDim 以及 Static 語(yǔ)句中的 To 子句提供了一種更靈活的方式來(lái)控制數組的下標。不過(guò),如果沒(méi)有使用 To 子句顯式地指定下界,則可以使用 Option Base 將缺省下界設為 1。使用 Array 函數創(chuàng )建的數組的下界也受 Option Base 語(yǔ)句指定的下界的決定, 除非 Array 是由類(lèi)型庫(例如 VBA.Array )名稱(chēng)限定,如果是由類(lèi)型庫名稱(chēng)限定,則 使用Array 函數創(chuàng )建的數組的下界不受 Option Base 的影響。
(2) Option Base 語(yǔ)句只影響位于包含該語(yǔ)句的模塊中的數組下界。
關(guān)于數組聲明的幾點(diǎn)說(shuō)明:
①數組名命名規則和變量名的相同。
②數組名后是用圓括弧括起來(lái)的,不能用方括弧,不同于C語(yǔ)言。
③下標的下界必須不能大于其上界。
④可以用變量名或常數名(以及實(shí)數)作下標的邊界。當下標的邊界是常數名時(shí),數組的大小固定,當下標的邊界是變量名時(shí),數組的大小可作動(dòng)態(tài)定義,即數組的大小取決于程序運行過(guò)程中變量的值。因此,VB 中數組又可以分為兩種數組:靜態(tài)數組、動(dòng)態(tài)數組。
3.靜態(tài)數組
靜態(tài)數組是指數組元素的個(gè)數是固定不變的,即它們占用的內存空間大小是固定不變的。根據固定大小數組的維數不同,可以將它分為一維數組和多維數組。
聲明多維數組的語(yǔ)法格式為:
Dim 數組名([下標邊界列表]) [As 數據類(lèi)型]
下標邊界的定義形式:[下標下界 To]下標上界
下標邊界列表指用逗號分開(kāi)的數組各維的下標邊界,即
[下標下界 To]下標上界,[下標下界 To]下標上界,……,[下標下界 To]下標上界
(第一維) (第二維) (第n維)
當n=1時(shí),數組稱(chēng)作一維數組;當n=2時(shí),數組稱(chēng)作二維數組;依次類(lèi)推,當n=m時(shí),數組稱(chēng)作m維數組。
下面舉例介紹一維數組的使用。
'聲明一個(gè)長(cháng)度為51的字符串數組FriendsName
Dim FriendsName(50) As String
'聲明一個(gè)長(cháng)度為11的全局整型數組Class
Public Class(10) As Integer
一維數組中的元素個(gè)數為(上界-下界+1)。
為數組賦初值可以采用循環(huán)語(yǔ)句,如:
Dim I As Integer
For I = 0 To 11 '循環(huán)語(yǔ)句的使用程序流程的控制
C(I) = I
Next I
如果不顯式指定下標下界,則數組的下標下界由 Option Base 語(yǔ)句控制。如果沒(méi)有 Option Base 語(yǔ)句則下界為默認為 0。
數組的維數并不限于2,在VB中,可以擴大至于60,在實(shí)際應用上對三維以上的數組的應用是不多的。定義一個(gè)多維數組時(shí)只需一條Dim語(yǔ)句指定數組的所有下標邊界即可,使用多維數組的可以很方便的表示一些有意義的統計數據。例如:
Dim Profit(16,10,12) As Currency
這個(gè)Profit數組可用來(lái)表示以店名、部門(mén)及月份為參數的某百貨公司的利潤。如:Profit(2,8,11)代表了第二分店的第八部門(mén)在11月份的利潤。
4.動(dòng)態(tài)數組
有時(shí)在數組開(kāi)始使用前,不能知道需要多大的數組才能滿(mǎn)足實(shí)際需要。當然可以把數組的大小定義到足夠大來(lái)滿(mǎn)足任意的實(shí)際應用需要,這種方法效率很低(大量浪費內存空間)。如果使用動(dòng)態(tài)數組,就可以在程序運行時(shí)根據實(shí)際需要,精確定義數組的大小。
在聲明數組時(shí),不給出維數列表就是將數組聲明為動(dòng)態(tài)數組。例如:
Dim MyArry() As Integer
在使用動(dòng)態(tài)數組前,必須使用ReDim語(yǔ)句把它重新定義。如前面聲明的數組MyArry,可以用以下語(yǔ)句將它定義為一個(gè)動(dòng)態(tài)二維數組。
ReDim MyArry(10,10)
還可以通過(guò)重復執行ReDim語(yǔ)句,多次定義動(dòng)態(tài)數組。使用ReDim最多能定義數組的維數是60。ReDim語(yǔ)句可以改變數組每維的元素個(gè)數,但不能改變維數。下面是對ReDim語(yǔ)句的一個(gè)標準應用舉例。
Dim MyArry() As Single ‘聲明動(dòng)態(tài)數組
ReDim MyArry(30,20,10) ‘重新定義數組
ReDim MyArry(50,23,21) ‘再次重新定義數組
ReDim的語(yǔ)法與Dim的相同,此外,它還有選擇項Preserve關(guān)鍵詞:
ReDim Preserve 數組名 ([ [下標下界 To]下標上界]) [As 數據類(lèi)型]
例如:
ReDim MyArry(50,23,21) ReDim Preserve MyArry(50,23,50)
注意:使用ReDim 時(shí),重新定義數組會(huì )使所有數組元素的值消失,而使用Preserve可以保留數據。但是用Preserve只能在改變數組的最后一維的大小時(shí),保留數組的數據。對于一維數組來(lái)說(shuō),所有數據都會(huì )保留,而對于多維數組:只能改變最后一維的大小,才能保留全部數組數據,否則出錯。
5.LBound 函數和UBound 函數
LBound 函數和Ubound函數都是返回一個(gè) Long 型數據,前者得到的值為指定數組維可用的最小下標,而后者得到的是最大下標。它們的語(yǔ)法為:
LBound(數組名[, 指定的維數])
UBound(數組名[, 指定的維數])
其中數組名是必選的。指定的維數是可選的,表明指定返回哪一維的下界。1 表示第一維,2 表示第二維,如此類(lèi)推。如果省略指定的維數,就默認為是 1。
關(guān)于如何使用LBound 函數與 UBound 函數可參見(jiàn)下例:
Dim A(1 to 100,3,-3 to 4) As Integer '定義一三維數組,假定沒(méi)有使用Option Base 語(yǔ)句改變數組下界的默認值。
對數組A使用Lbound 和Ubound函數,其返回值列表如下
所有維的缺省下界取決于 Option Base 語(yǔ)句的設置??梢钥闯鰧σ粩到M使用LBound 函數與 UBound 函數,可用于確定一個(gè)數組中元素的個(gè)數。
對于那些在聲明中用 To 子句來(lái)設定維數的數組而言,它們可以用任何整數作為下界而不受Option Base 語(yǔ)句的限制。
6.數組的高級功能
盡管數組最通常被用來(lái)存儲成組的變量,但是在別的一些方面數組也是很有用的??梢詫⒁粋€(gè)數組的內容賦值給另一個(gè)數組、創(chuàng )建返回數組的函數,還可以創(chuàng )建返回數組的屬性。在許多情況下,這些技術(shù)能改進(jìn)應用程序的性能。
正如可以將一個(gè)變量的值賦給另一個(gè)變量,例如 StrA = StrB ,也可以將一個(gè)數組的內容賦給另一個(gè)數組。例如,要將一字節型數組從一個(gè)位置復制到另一個(gè)位置??梢酝ㄟ^(guò)每次復制一個(gè)字節來(lái)實(shí)現,程序如下:
Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte) ‘參數oldCopy()是源數組,newCopy()是目標數組 Dim i As Integer ReDim newCopy (Lbound(oldCopy) To UBound(oldCopy)) '重新定義動(dòng)態(tài)數組 For i = Lbound(oldCopy) To Ubound(oldCopy) '循環(huán)賦值 newCopy(i) = oldCopy(i) Next End Sub
一個(gè)更有效的簡(jiǎn)單的方法就是直接將一個(gè)數組賦給另外一個(gè)數組:
Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte) ‘參數oldCopy()是源數組,newCopy()是目標數組 newCopy = oldCopy '利用數組直接進(jìn)行賦值 End Sub
關(guān)于變量賦值有一些規則需要銘記。例如,雖然可以將一個(gè)聲明為整型的變量賦給一個(gè)聲明為長(cháng)整型的變量而不會(huì )產(chǎn)生任何問(wèn)題,但是將一個(gè)長(cháng)整型變量賦給一個(gè)整型變量就很容易導致溢出錯誤。除了遵守有關(guān)數據類(lèi)型變量之間賦值時(shí)的規則外,數組賦值還要遵從另外一些規則,包括數組維數,每一維的大小,以及數組是固定的還是動(dòng)態(tài)的。
①維數、數據類(lèi)型不同的數組賦值考慮的幾個(gè)因素
1、 賦值符左邊的數組類(lèi)型:固定數組 (Dim x(1 to 10) As Integer) 或者動(dòng)態(tài)數組 (Dim x() As Integer)。
2、賦值符左邊數組的維數是否和賦值符右邊數組的維數匹配。
3、 賦值符兩邊數組的每一維的數組元素個(gè)數是否匹配。即使數組的聲明不同,維數也可能匹配。比如一個(gè)數組的每一維元素從 0 開(kāi)始編號而另一個(gè)則從 1 開(kāi)始,維數也可能匹配。
4、 賦值符兩邊所有元素的數據類(lèi)型必須是相容的。這些規則和變量賦值的規則是一致的。
數組賦值時(shí)的錯誤可能發(fā)生在編譯時(shí),也可能發(fā)生在運行時(shí)(例如,如果數據類(lèi)型不能強制轉換或賦值試圖重新聲明 (ReDim) 一個(gè)靜態(tài)數組)。設計程序時(shí)要添加錯誤處理以確保數組在賦值之前是匹配的。
②編寫(xiě)返回數組的函數
從一個(gè)函數返回一組值是可能實(shí)現的。例如,從一個(gè)函數返回一組字節而不必將其先轉換為一個(gè)字符串然后再轉換回來(lái)。
下面是一個(gè)使用返回字節數組的函數的簡(jiǎn)單示例:
Private Sub Form_Load() Dim b As Byte Dim i As Integer Dim ReturnArray() As Byte b = Cbyte(54) ReturnArray() = ArrayFunction(b) '調用函數 For i = Lbound(ReturnArray) To Ubound(ReturnArray) Msgbox ReturnArray(i) '通過(guò)彈出消息框循環(huán)顯示數組值 Next End Sub Public Function ArrayFunction(b As Byte) As Byte() Dim x(2) As Byte x(0) = b x(1) = b + CByte(200) x(2) = b + b ArrayFunction = x '返回結果為數組x End Function
在運行以上示例后, ReturnArray() 是一個(gè)三元素數組,其中包含了分配給 ArrayFunction 中數組的值。ArrayFunction 語(yǔ)句將一個(gè)數組作為參數傳遞;且數組的數據類(lèi)型必須和函數的數據類(lèi)型相同(在本例中是字節)。因為這是一個(gè)函數調用,傳遞數組時(shí)不必帶括號。
注意:
1、盡管可以通過(guò)賦值給另一個(gè)數組(ArrayFunction = x())來(lái)返回一個(gè)數組,但出于性能方面的考慮,并不推薦使用這種方法。
2、必須為返回數組的函數指定一個(gè)類(lèi)型,這個(gè)類(lèi)型可以是 Variant。這樣一來(lái),Function X() As Variant() 是有效的而 Function X() As () 將失敗。
3、當調用一個(gè)返回數組的函數時(shí),用來(lái)保存返回值的變量也必須是一個(gè)數組,而且其數據類(lèi)型必須和函數返回類(lèi)型相同,否則將顯示一個(gè)“類(lèi)型不匹配”的錯誤。
以上就是小編和大家分享的ASP定義數組的方法,感興趣的小伙伴們可以來(lái)參考一下
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站