ASP数组的应用

来源:互联网 发布:淘宝商品排名软件 编辑:程序博客网 时间:2024/04/27 21:22
数组变量和动态调整数组大小

VBScript 数组变量
有时候,将多个相关值赋给一个变量更为方便,因此可以创建包含一系列值的变量,称为数组变量。数组变量和标量变量是以相同的方式声明的,唯一的区别是声明数组变量时变量名后面带有括号 ( )。
下例声明了一个包含 11 个元素的一维数组:

Dim A(10)
虽然括号中显示的数字是 10,但由于在 VBScript 中所有数组都是基于 0 的,所以这个数组实际上包含 11 个元素。在基于 0 的数组中,数组元素的数目总是括号中显示的数目加 1。这种数组被称为固定大小的数组。

在数组中使用索引为数组的每个元素赋值。从 0 到 10,将数据赋给数组的元素,如下所示:

A(0) = 256
A(1) = 324
A(2) = 100
. . .
A(10) = 55
与此类似,使用索引可以检索到所需的数组元素的数据。例如:

. . .
SomeVariable = A(8)
. . .
数组并不仅限于一维。数组的维数最大可以为 60(尽管大多数人不能理解超过 3 或 4 的维数)。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中,MyTable 变量是一个有 6 行和 11 列的二维数组:

Dim MyTable(5, 10)
在二维数组中,括号中第一个数字表示行的数目,第二个数字表示列的数目。

也可以声明动态数组,即在运行脚本时大小发生变化的数组。对数组的最初声明使用 Dim 语句或 ReDim 语句。但是对于动态数组,括号中不包含任何数字。www.aspxuexi.com
例如:

Dim MyArray()
ReDim AnotherArray()
要使用动态数组,必须随后使用 ReDim 确定维数和每一维的大小。在下例中,ReDim 将动态数组的初始大小设置为 25,而后面的 ReDim 语句将数组的大小重新调整为 30,同时使用 Preserve 关键字在重新调整大小时保留数组的内容。

ReDim MyArray(25)
. . .
ReDim Preserve MyArray(30)
重新调整动态数组大小的次数是没有任何限制的,尽管将数组的大小调小时,将会丢失被删除元素的数据。


ReDim 语句
ReDim [Preserve] varname(subscripts) [, varname(subscripts)] . . .
参数
Preserve
当更改现有数组最后一维的大小时保留数据。
varname
变量名,遵循标准变量命名规则。
subscripts
数组变量的维数,最多可以声明 60 维数组。subscripts 参数语法格式如下:
upper [,upper] . . .

数组的下界总是零。

说明
ReDim 语句通常用于指定或修改动态数组的大小,这些数组已用带有空括号的 Private、Public 或 Dim 语句(没有维数下标)正式声明过。可以重复使用 ReDim 语句更改数组维数和元素数目。www.aspxuexi.com

如果使用了 Preserve 关键字,就只能调整数组最后维的大小,并且不能改变数组的维数。例如,如果数组只有一维,就可以修改该数组的大小,因为该维是最后的也是仅有的一维。但是,如果数组有两个或更多维,就只能改变末维的大小并保留数组内容。

这个例子说明如何不擦掉该数组中存在的数据,而增加动态数组的终止维数。

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)
警告 如果减小数组的大小,则将丢失被排除的元素中的数据。
变量初始化时,数值变量初始化为 0,字符串变量初始化为零长度字符串 ("")。在使用引用对象的变量前,必须使用 Set 语句将某个现有对象赋予该变量。在进行对象赋值以前,已声明的对象变量有特定值 Nothing。

asp 数组的大小 LBound 函数和UBound 函数
LBound 函数
返回指定数组维的最小可用下标。

LBound(arrayname[, dimension])
参数
arrayname
数组变量名,遵循标准变量命名规则。
Dimension
指明要返回哪一维下界的整数。使用 1 表示第一维,2 表示第二维,以此类推。如果省略 dimension 参数,默认值为 1。
说明
LBound 函数与 UBound 函数共同使用以确定数组的大小。使用 UBound 函数可以找到数组某一维的上界。

任一维的下界都是 0。
UBound 函数
返回指定数组维数的最大可用下标。

UBound(arrayname[, dimension])
参数
arrayname
必选项。数组变量名,遵循标准变量命名规则。
Dimension
可选项。指定返回哪一维上界的整数。1 表示第一维,2 表示第二维,以此类推。如果省略 dimension 参数,则默认值为 1。
说明
UBound 函数与 LBound 函数一起使用,用于确定数组的大小。使用 LBound 函数可以确定数组某一维的下界。

所有维的下界均为 0。对于有这样维数的数组,UBound 函数返回以下结果:

Dim A(100,3,4)


语句返回值UBound(A, 1)100UBound(A, 2)3UBound(A, 3)4


清除数组元素 Erase 语句

Erase 语句
重新初始化固定大小数组的元素,并释放动态数组的存储空间。 www.aspxuexi.com  asp学习网


Erase array
array 参数是要清除的数组变量的名称。

说明
判断数组是固定长度数组(常规)还是动态数组是很重要的,这是因为 Erase 要根据数组的类型进行不同的操作。Erase 无需为固定大小的数组还原内存。Erase 按照下表设置固定数组的元素:

数组的类型 Erase 对固定数组元素的影响
固定数值数组 将每个元素设置为 0。
固定字符串数组 将每个元素设置为零长度字符串 ("")。
对象数组 将每个元素设置为特殊值 Nothing。

Erase 释放动态数组所使用的内存。在程序再次引用该动态数组之前,必须使用 ReDim 语句来重新定义该数组变量的维数。

下面例子举例说明如何使用 Erase 语句。

Dim NumArray(9)
Dim DynamicArray()
ReDim DynamicArray(9) ' 分配存储空间。
Erase NumArray ' 每一元素都被重新初始化。
Erase DynamicArray ' 释放数组占用的内存。

过滤和筛选数组 Filter 函数
Filter 函数
返回下标从零开始的数组,其中包含以特定过滤条件为基础的字符串数组的子集。

Filter(InputStrings, Value[, Include[, Compare]])
参数
InputStrings
必选项。一维数组,要在其中搜索字符串。
Value
必选项。要搜索的字符串。
Include
可选项。Boolean 值,指定返回的子字符串是否包含 Value。如果 Include 为 True,Filter 将返回包含子字符串 Value 的数组子集。如果 Include 为 False,Filter 将返回不包含子字符串 Value 的数组子集。
Compare
可选项。数字值指出使用的比较字符串类型。请参阅值设置部分。
设置
Compare 参数可以有以下值:

常数 值 描述
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文本比较。

说明
如果在 InputStrings 中没有找到与 Value 匹配的值,Filter 将返回空数组。如果 InputStrings 为 Null 或者不是一维数组,则会发生错误。

由 Filter 函数返回的数组仅包含足以包含匹配项数目的元素。

下面例子利用 Filter 函数返回包含搜索条件 "Mon" 的数组:

Dim MyIndex  'www.aspxuexi.com
Dim MyArray (3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
MyIndex = Filter(MyArray, "Mon") 'MyIndex(0) 包含 "Monday"。

判断对象是否为数组 IsArray 函数
参考:http://www.aspxuexi.com/rumen/2006-12-18/1790.htm
IsArray 函数
返回 Boolean 值指明某变量是否为数组。

IsArray(varname)
varname 参数可以是任意变量。

说明
如果变量是数组,IsArray 函数返回 True;否则,函数返回 False。当变量中包含有数组时,使用 IsArray 函数很有效。

下面的示例利用 IsArray 函数验证 MyVariable 是否为一数组:

Dim MyVariable
Dim MyArray(3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
MyVariable = IsArray(MyArray) ' MyVariable 包含 "True"。

将数组链接为字符串,或者将字符串分解为数组 join 方法 和 Split 函数
参看:http://www.aspxuexi.com/vbscript/2006-4-28/asp_split.htm
join 方法

应用于: Array 对象
返回字符串值,其中包含了连接到一起的数组的所有元素,元素由指定的分隔符分隔开来。

arrayObj.join(separator)
参数
arrayObj
必选项。Array 对象。
separator
必选项。是一个 String 对象,作为最终的 String 对象中对数组元素之间的分隔符。如果省略了这个参数,那么数组元素之间就用一个逗号来分隔。
说明
如果数组中有元素没有定义或者为 null,将其作为空字符串处理。

示例
下面这个例子说明了 join 方法的用法。

function JoinDemo(){
var a, b;
a = new Array(0,1,2,3,4);
b = a.join("-");
return(b);
}

split请参考上面的文章。

从数据库中返回数组
getrows的使用参看
http://www.aspxuexi.com/sql/2006-4-29/NextRecordset_GetRows.htm
http://www.aspxuexi.com/sql/2007-1-16/1910.htm

其他参考:asp数组排序 http://www.aspxuexi.com/code/2006-5-13/Sort_ary.htm
<%
'asp学习网 数组排序的函数
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
%>

调用方法:

<%
str = "234,54,294,2347,653,121,37,34578,4537,53,34,7,2,5768,2"
response.write NewOrder(str)
%>
0 0
原创粉丝点击