數(shù)組變量和動(dòng)態(tài)調(diào)整數(shù)組大小。
VBScript數(shù)組變量
有時(shí)候,將多個(gè)相關(guān)值賦給一個(gè)變量更為方便,因此可以創(chuàng)建包含一系列值的變量,稱(chēng)為數(shù)組變量。數(shù)組變量和標(biāo)量變量是以相同的方式聲明的,唯一的區(qū)別是聲明數(shù)組變量時(shí)變量名后面帶有括號(hào)
( )。
下例聲明了一個(gè)包含 11 個(gè)元素的一維數(shù)組:
Dim A(10)
雖然括號(hào)中顯示的數(shù)字是 10,但由于在 VBScript 中所有數(shù)組都是基于 0
的,所以這個(gè)數(shù)組實(shí)際上包含 11 個(gè)元素。在基于 0
的數(shù)組中,數(shù)組元素的數(shù)目總是括號(hào)中顯示的數(shù)目加
1。這種數(shù)組被稱(chēng)為固定大小的數(shù)組。
在數(shù)組中使用索引為數(shù)組的每個(gè)元素賦值。從 0 到
10,將數(shù)據(jù)賦給數(shù)組的元素,如下所示:
A(0) = 256
A(1) = 324
A(2) = 100
. . .
A(10) = 55
與此類(lèi)似,使用索引可以檢索到所需的數(shù)組元素的數(shù)據(jù)。例如:
. . .
SomeVariable = A(8)
. . .
數(shù)組并不僅限于一維。數(shù)組的維數(shù)最大可以為
60(盡管大多數(shù)人不能理解超過(guò) 3 或 4
的維數(shù))。聲明多維數(shù)組時(shí)用逗號(hào)分隔括號(hào)中每個(gè)表示數(shù)組大小的數(shù)字。在下例中,MyTable
變量是一個(gè)有 6 行和 11 列的二維數(shù)組:
Dim MyTable(5, 10)
在二維數(shù)組中,括號(hào)中第一個(gè)數(shù)字表示行的數(shù)目,第二個(gè)數(shù)字表示列的數(shù)目。
也可以聲明動(dòng)態(tài)數(shù)組,即在運(yùn)行腳本時(shí)大小發(fā)生變化的數(shù)組。對(duì)數(shù)組的最初聲明使用
Dim 語(yǔ)句或 ReDim
語(yǔ)句。但是對(duì)于動(dòng)態(tài)數(shù)組,括號(hào)中不包含任何數(shù)字。
例如:
Dim MyArray()
ReDim AnotherArray()
要使用動(dòng)態(tài)數(shù)組,必須隨后使用 ReDim
確定維數(shù)和每一維的大小。在下例中,ReDim 將動(dòng)態(tài)數(shù)組的初始大小設(shè)置為
25,而后面的 ReDim 語(yǔ)句將數(shù)組的大小重新調(diào)整為 30,同時(shí)使用 Preserve
關(guān)鍵字在重新調(diào)整大小時(shí)保留數(shù)組的內(nèi)容。
ReDim MyArray(25)
. . .
ReDim Preserve MyArray(30)
重新調(diào)整動(dòng)態(tài)數(shù)組大小的次數(shù)是沒(méi)有任何限制的,盡管將數(shù)組的大小調(diào)小時(shí),將會(huì)丟失被刪除元素的數(shù)據(jù)。
ReDim 語(yǔ)句
ReDim [Preserve] varname(subscripts) [, varname(subscripts)] . .
.
參數(shù)
Preserve
當(dāng)更改現(xiàn)有數(shù)組最后一維的大小時(shí)保留數(shù)據(jù)。
varname
變量名,遵循標(biāo)準(zhǔn)變量命名規(guī)則。
subscripts
數(shù)組變量的維數(shù),最多可以聲明 60 維數(shù)組。subscripts
參數(shù)語(yǔ)法格式如下:
upper [,upper] . . .
數(shù)組的下界總是零。
說(shuō)明
ReDim
語(yǔ)句通常用于指定或修改動(dòng)態(tài)數(shù)組的大小,這些數(shù)組已用帶有空括號(hào)的
Private、Public 或 Dim 語(yǔ)句(沒(méi)有維數(shù)下標(biāo))正式聲明過(guò)??梢灾貜?fù)使用
ReDim 語(yǔ)句更改數(shù)組維數(shù)和元素?cái)?shù)目。
如果使用了 Preserve
關(guān)鍵字,就只能調(diào)整數(shù)組最后維的大小,并且不能改變數(shù)組的維數(shù)。例如,如果數(shù)組只有一維,就可以修改該數(shù)組的大小,因?yàn)樵摼S是最后的也是僅有的一維。但是,如果數(shù)組有兩個(gè)或更多維,就只能改變末維的大小并保留數(shù)組內(nèi)容。
這個(gè)例子說(shuō)明如何不擦掉該數(shù)組中存在的數(shù)據(jù),而增加動(dòng)態(tài)數(shù)組的終止維數(shù)。
ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)
警告 如果減小數(shù)組的大小,則將丟失被排除的元素中的數(shù)據(jù)。
變量初始化時(shí),數(shù)值變量初始化為 0,字符串變量初始化為零長(zhǎng)度字符串
("")。在使用引用對(duì)象的變量前,必須使用 Set
語(yǔ)句將某個(gè)現(xiàn)有對(duì)象賦予該變量。在進(jìn)行對(duì)象賦值以前,已聲明的對(duì)象變量有特定值
Nothing。
asp 數(shù)組的大小 LBound 函數(shù)和UBound 函數(shù)
LBound 函數(shù)
返回指定數(shù)組維的最小可用下標(biāo)。
LBound(arrayname[, dimension])
參數(shù)
arrayname
數(shù)組變量名,遵循標(biāo)準(zhǔn)變量命名規(guī)則。
Dimension
指明要返回哪一維下界的整數(shù)。使用 1 表示第一維,2
表示第二維,以此類(lèi)推。如果省略 dimension 參數(shù),默認(rèn)值為 1。
說(shuō)明
LBound 函數(shù)與 UBound 函數(shù)共同使用以確定數(shù)組的大小。使用 UBound
函數(shù)可以找到數(shù)組某一維的上界。
任一維的下界都是 0。
UBound 函數(shù)
返回指定數(shù)組維數(shù)的最大可用下標(biāo)。
UBound(arrayname[, dimension])
參數(shù)
arrayname
必選項(xiàng)。數(shù)組變量名,遵循標(biāo)準(zhǔn)變量命名規(guī)則。
Dimension
可選項(xiàng)。指定返回哪一維上界的整數(shù)。1 表示第一維,2
表示第二維,以此類(lèi)推。如果省略 dimension 參數(shù),則默認(rèn)值為 1。
說(shuō)明
UBound 函數(shù)與 LBound 函數(shù)一起使用,用于確定數(shù)組的大小。使用 LBound
函數(shù)可以確定數(shù)組某一維的下界。
所有維的下界均為 0。對(duì)于有這樣維數(shù)的數(shù)組,UBound
函數(shù)返回以下結(jié)果:
Dim A(100,3,4)
語(yǔ)句 |
返回值 |
UBound(A, 1) |
100 |
UBound(A, 2) |
3 |
UBound(A, 3) |
4 |
清除數(shù)組元素 Erase 語(yǔ)句
Erase 語(yǔ)句
重新初始化固定大小數(shù)組的元素,并釋放動(dòng)態(tài)數(shù)組的存儲(chǔ)空間。
www. asp學(xué)習(xí)網(wǎng)
Erase array
array 參數(shù)是要清除的數(shù)組變量的名稱(chēng)。
說(shuō)明
判斷數(shù)組是固定長(zhǎng)度數(shù)組(常規(guī))還是動(dòng)態(tài)數(shù)組是很重要的,這是因?yàn)?
Erase 要根據(jù)數(shù)組的類(lèi)型進(jìn)行不同的操作。Erase
無(wú)需為固定大小的數(shù)組還原內(nèi)存。Erase
按照下表設(shè)置固定數(shù)組的元素:
數(shù)組的類(lèi)型 Erase 對(duì)固定數(shù)組元素的影響
固定數(shù)值數(shù)組 將每個(gè)元素設(shè)置為 0。
固定字符串?dāng)?shù)組 將每個(gè)元素設(shè)置為零長(zhǎng)度字符串 ("")。
對(duì)象數(shù)組 將每個(gè)元素設(shè)置為特殊值 Nothing。
Erase
釋放動(dòng)態(tài)數(shù)組所使用的內(nèi)存。在程序再次引用該動(dòng)態(tài)數(shù)組之前,必須使用
ReDim 語(yǔ)句來(lái)重新定義該數(shù)組變量的維數(shù)。
下面例子舉例說(shuō)明如何使用 Erase 語(yǔ)句。
Dim NumArray(9)
Dim DynamicArray()
ReDim DynamicArray(9) ' 分配存儲(chǔ)空間。
Erase NumArray ' 每一元素都被重新初始化。
Erase DynamicArray ' 釋放數(shù)組占用的內(nèi)存。
過(guò)濾和篩選數(shù)組 Filter 函數(shù)
Filter 函數(shù)
返回下標(biāo)從零開(kāi)始的數(shù)組,其中包含以特定過(guò)濾條件為基礎(chǔ)的字符串?dāng)?shù)組的子集。
Filter(InputStrings, Value[, Include[, Compare]])
參數(shù)
InputStrings
必選項(xiàng)。一維數(shù)組,要在其中搜索字符串。
Value
必選項(xiàng)。要搜索的字符串。
Include
可選項(xiàng)。Boolean 值,指定返回的子字符串是否包含 Value。如果 Include
為 True,F(xiàn)ilter 將返回包含子字符串 Value 的數(shù)組子集。如果 Include
為 False,F(xiàn)ilter 將返回不包含子字符串 Value 的數(shù)組子集。
Compare
可選項(xiàng)。數(shù)字值指出使用的比較字符串類(lèi)型。請(qǐng)參閱值設(shè)置部分。
設(shè)置
Compare 參數(shù)可以有以下值:
常數(shù) 值 描述
vbBinaryCompare 0 執(zhí)行二進(jìn)制比較。
vbTextCompare 1 執(zhí)行文本比較。
說(shuō)明
如果在 InputStrings 中沒(méi)有找到與 Value 匹配的值,F(xiàn)ilter
將返回空數(shù)組。如果 InputStrings 為 Null
或者不是一維數(shù)組,則會(huì)發(fā)生錯(cuò)誤。
由 Filter 函數(shù)返回的數(shù)組僅包含足以包含匹配項(xiàng)數(shù)目的元素。
下面例子利用 Filter 函數(shù)返回包含搜索條件 "Mon" 的數(shù)組:
Dim MyIndex 'www.
Dim MyArray (3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
MyIndex = Filter(MyArray, "Mon") 'MyIndex(0) 包含
"Monday"。
判斷對(duì)象是否為數(shù)組 IsArray 函數(shù)
IsArray 函數(shù)
返回 Boolean 值指明某變量是否為數(shù)組。
IsArray(varname)
varname 參數(shù)可以是任意變量。
說(shuō)明
如果變量是數(shù)組,IsArray 函數(shù)返回 True;否則,函數(shù)返回
False。當(dāng)變量中包含有數(shù)組時(shí),使用 IsArray 函數(shù)很有效。
下面的示例利用 IsArray 函數(shù)驗(yàn)證 MyVariable 是否為一數(shù)組:
Dim MyVariable
Dim MyArray(3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
MyVariable = IsArray(MyArray) ' MyVariable 包含 "True"。
將數(shù)組鏈接為字符串,或者將字符串分解為數(shù)組 join 方法
和 Split 函數(shù)
join 方法
應(yīng)用于: Array 對(duì)象
返回字符串值,其中包含了連接到一起的數(shù)組的所有元素,元素由指定的分隔符分隔開(kāi)來(lái)。
arrayObj.join(separator)
參數(shù)
arrayObj
必選項(xiàng)。Array 對(duì)象。
separator
必選項(xiàng)。是一個(gè) String 對(duì)象,作為最終的 String
對(duì)象中對(duì)數(shù)組元素之間的分隔符。如果省略了這個(gè)參數(shù),那么數(shù)組元素之間就用一個(gè)逗號(hào)來(lái)分隔。
說(shuō)明
如果數(shù)組中有元素沒(méi)有定義或者為 null,將其作為空字符串處理。
示例
下面這個(gè)例子說(shuō)明了 join 方法的用法。
function JoinDemo(){
var a, b;
a = new Array(0,1,2,3,4);
b = a.join("-");
return(b);
}
split請(qǐng)參考上面的文章。
從數(shù)據(jù)庫(kù)中返回?cái)?shù)組
getrows的使用參看
http://www./sql/2006-4-29/NextRecordset_GetRows.htm
http://www./sql/2007-1-16/1910.htm
其他參考:asp數(shù)組排序 http://www./code/2006-5-13/Sort_ary.htm
<%
'asp學(xué)習(xí)網(wǎng) 數(shù)組排序的函數(shù)
Function NewOrder(sz)
Dim ali,icount,i,ii,j,itemp
ali=split(sz,",")
icount=UBound(ali)
For i=0 To icount
For j=icount - 1 To i Step -1
If j+1 <= UBound(ali) Then
If int(ali(j))<int(ali(j+1)) Then
itemp=ali(j)
ali(j)=ali(j+1)
ali(j+1)=itemp
End If
End If
Next
Next
For ii=0 to Ubound(ali)
If ii = Ubound(ali) Then
NewOrder = NewOrder & ali(ii)
Else
NewOrder = NewOrder & ali(ii) & ","
End If
Next
End Function
%>
調(diào)用方法:
<%
str =
"234,54,294,2347,653,121,37,34578,4537,53,34,7,2,5768,2"
response.write NewOrder(str)
%>