歡迎訪問世紀網絡官網,寶雞網站建設SEO優化已累計服務超過900家企業!     咨詢熱線:13619273150

15年網站建設優化經驗,900家客戶的選擇,值得信賴!


適用于初學者的asp數組類

作者:佚名      發布時間:2011-12-31      瀏覽:2267

62.9K


asp中對數組的操作功能太弱,所以寫了一個ArrayList(參考c#中的ArrayList),可以滿足對數組操作的大部分功能.

對數組操作要注意的一些問題:

1,LBound()UBound()是取得數組里最小的和最大的索引值,并不是數組的長度,

數組的長度是:UBound()+1

2,有時要動態改變數組大小,所以要先聲明一個空的數組:

Dim arr()

使用這種方式聲明的空數組如果用LBound()UBound()取值的話會出現錯誤,但可以使用For Each:

Dim arr()

For Each v In arr

Response.Write v

Next

這樣就不會出錯了

另一種聲明空數組的方法是:

Dim arr

arr=array()

這樣的話使用LBound(arr)UBound(arr)則分別返回0-1

ArrayList類功能描述:

***************ArrayList屬性***************

ArrayList.Length:數組長度

***************ArrayList方法***************

---數組添加:

ArrayList.Add(v):ArrayList尾部添加一個元素

ArrayList.AddArray(arr):ArrayList尾部附加一個數組

ArrayList.Insert(index,v):ArrayListindex處插入一個值,原先的index和之后的值都往后移

ArrayList.InsertArray(index,arr):ArrayListindex處插入一個數組,原先的index和之后的值都往后移

---數組更新:

ArrayList.Update(index,v):更新索引為index處的值

---數組刪除:

ArrayList.Remove(v):ArrayList中刪除第一個匹配項,注意是第一個,將會得到一新的數組

ArrayList.RemoveAt(index):移除ArrayList的指定索引處的元素,將會得到一新的數組

ArrayList.Splice(m,n):從一個數組中移除從索引m到索引n的一段元素,并返回這段移除的數組

ArrayList.Clear()清空數組,數組將變為空,長度Length=0

---數組查找:

ArrayList.IndexOf(v):查找,返回ArrayList第一個匹配項的索引。沒找到返回-1。

ArrayList.LastIndexOf(v):返回ArrayList的最后一個匹配項的索引。沒找到返回-1。

---返回數組中的值:

ArrayList.GetValue(index)取得ArrayList某個索引的值

ArrayList.Slice(m,n)返回ArrayListmn的一段數組

ArrayList.GetArray()返回整個Array數組

---數組其他操作:

ArrayList.Reverse()將整個 ArrayList 中元素的順序反轉

ArrayList.Implode(separator)返回字符串值,元素由指定的分隔符分隔開來

******************************/

<%

/******************************

’類名:ArrayList

’名稱:數組操作類

Class ArrayList

Private arrList//內部數組

Private arrLength//記錄數組的長度

Private Sub Class_Initialize()

arrList=Array()

arrLength=0

End Sub

Private Sub Class_Terminate()

Erase arrList

End Sub

//數組長度,只讀

Public Property Get Length

Length=arrLength

End Property

//取得某個索引的值

Public Function GetValue(index)

On Error Resume Next

GetValue=arrList(index)

If Err Then showErr "ArrayList.GetValue()"&Err.Description:Err.Clear:Exit Function

End Function

//返回整個Array數組

Public Function GetArray()

GetArray=arrList

End Function

//添加元素,將值添加到ArrayList的結尾處

Public Sub Add(v)

ReDim Preserve arrList(arrLength)

arrList(arrLength)=v

arrLength=arrLength+1

End Sub

//將數組添加到ArrayList的結尾處

Public Sub AddArray(arr)

If Not IsArray(arr) Then showErr "參數不是數組(arr):ArrayList.AddArray()":Exit Sub

Dim I,L,J

On Error Resume Next

If arrLength = 0 Then //如果ArrayList為空則直接附值

arrList=arr

arrLength=arrLength+UBound(arr)+1

Else

L=arrLength+UBound(arr)//新的數組長度

J=0

ReDim Preserve arrList(L)

For I = arrLength To L

arrList(I)=arr(J)

J=J+1

Next

arrLength=arrLength+UBound(arr)+1

End If

If Err Then showErr "ArrayList.AddArray()"&Err.Description:Err.Clear:Exit Sub

End Sub

//將元素插入ArrayList的指定index索引處,原有的arrList(index)及后面的元素都往后排

Public Sub Insert(index,v)

Dim I,v2

If index=0 Then

ReDim Preserve arrList(arrLength)

arrLength=arrLength+1

For I = index To arrLength - 1

v2=arrList(I)//交換值

arrList(I)=v

v=v2

Next

Else

showErr "下標越界:ArrayList.Insert()"

End If

End Sub

//將一組數組插入到指定的index

Public Sub InsertArray(index,arr)

If index = "" Or Not IsNumeric(index) Then

showErr "非法的參數:ArrayList.InsertArray()":Exit Sub

End If

If index < 0 Or index > arrLength-1 Then

showErr "下標越界:ArrayList.InsertArray()":Exit Sub

End If

If Not IsArray(arr) Then showErr "參數不是數組:ArrayList.InsertArray()":Exit Sub

Dim I,L1,L2,J:J=0

On Error Resume Next

L1=UBound(arr)

L2=arrLength+L1

ReDim Preserve arrList(L2)

For I = arrLength -1 To index Step -1

arrList(I+L1+1)=arrList(I)//index之后的值往后移

Next

For I = index To index+L1

arrList(I)=arr(J)

J=J+1

Next

If Err Then showErr "ArrayList.InsertArray()"&Err.Description:Err.Clear:Exit Sub

arrLength=arrLength+L1+1//新的數組長度

End Sub

//更新數組中索引為index的對應值

//by xilou 39949376

Public Sub Update(index,v)

If index = "" Or Not IsNumeric(index) Then

showErr "非法的參數(index):ArrayList.Update()":Exit Sub

End If

If index < 0 Or index > arrLength-1 Then

showErr "下標越界(index):ArrayList.Update()":Exit Sub

End If

arrList(index)=v

End Sub

//ArrayList中刪除第一個匹配項,注意是第一個,將會得到一新的數組

Public Sub Remove(v)

Dim I,index

index = -1 //第一個匹配的索引

For I = 0 To arrLength - 1

If arrList(I)=v Then index = I : Exit For

Next

If index <> -1 Then

For I = index To arrLength - 2

arrList(I) = arrList(I+1)//值向前填充

Next

ReDim Preserve arrList(arrLength-1)//收縮數組

arrLength = arrLength - 1

End If

End Sub

//移除ArrayList的指定索引處的元素,將會得到一新的數組

Public Sub RemoveAt(index)

If index = "" Or Not IsNumeric(index) Then

showErr "非法的參數(index):ArrayList.RemoveAt()":Exit Sub

End If

If index < 0 Or index > arrLength-1 Then

showErr "下標越界(index):ArrayList.RemoveAt()":Exit Sub

End If

If index > 0 Then

For I = index To arrLength - 2

arrList(I) = arrList(I+1)//值向前填充

Next

ReDim Preserve arrList(arrLength-1)//收縮數組

arrLength = arrLength - 1

End If

End Sub

//從一個數組中移除從索引m到索引n的一段元素,并返回這段移除的數組

Public Function Splice(m,n)

If m = "" Or n = "" Or Not IsNumeric(m) Or Not IsNumeric(n) Then

showErr "非法的參數(m,n):ArrayList.Splice()":Exit Function

End If

If m < 0 Or m > arrLength-1 Or n < 0 Or n > arrLength-1 Then

showErr "下標越界(m,n):ArrayList.Splice()":Exit Function

End If

Dim newArr,x,L,I,J

newArr=Array()

If m > n Then x=m:m=n:n=x //交換數值

L=n-m

ReDim Preserve newArr(L)

For I = m To n

newArr(J)=arrList(I)’要移除的元素

J=J+1

Next

//n后面的元素的值移前

For I = (n+1) To arrLength -1

arrList(I-L-1)=arrList(I)

Next

arrLength=arrLength-L-1

ReDim Preserve arrList(arrLength)

Splice=newArr

End Function

//清空數組,數組將變為空,長度Length=0

Public Sub Clear()

Erase arrList

arrLength=0

End Sub

//將整個 ArrayList 中元素的順序反轉

Public Sub Reverse()

Dim L,I,J,v

J=arrLength-1

If arrLength > 0 Then

L=Int(arrLength/2)

For I = 0 To L-1

v=arrList(I)

arrList(I)=arrList(J)

arrList(J)=v

J=J-1

Next

End If

End Sub

//返回字符串值,其中包含了連接到一起的數組的所有元素,元素由指定的分隔符分隔開來

Public Function Implode(separator)

Implode=Join(arrList,separator)

End Function

//返回ArrayListmn的一段數組

Public Function Slice(m,n)

If m = "" Or n = "" Or Not IsNumeric(m) Or Not IsNumeric(n) Then

showErr "非法的參數:ArrayList.Slice()":Exit Function

End If

If m < 0 Or m > arrLength-1 Or n < 0 Or n > arrLength-1 Then

showErr "下標越界:ArrayList.Slice()":Exit Function

End If

Dim I,J,newArr()

J=0

If m<=n Then

ReDim Preserve newArr(n-m)

For I = m To n

newArr(J)=arrList(I)

J=J+1

Next

Else

ReDim Preserve newArr(m-n)

For I = n To m

newArr(J)=arrList(I)

J=J+1

Next

End If

Slice=newArr

Erase newArr

End Function

//查找,返回ArrayList第一個匹配項的從零開始的索引。沒找到返回-1。

//by xilou 39949376

Public Function IndexOf(v)

Dim I

For I = 0 To arrLength - 1

If arrList(I)=v Then IndexOf=I:Exit Function

Next

IndexOf=-1

End Function

//返回ArrayList的最后一個匹配項的從零開始的索引。沒找到返回-1。

Public Function LastIndexOf(v)

Dim I

If arrLength=0 Then

LastIndexOf=-1:Exit Function

Else

For I = (arrLength-1) To 0 Step -1

If arrList(I)=v Then LastIndexOf=I:Exit Function

Next

End If

LastIndexOf=-1

End Function

//顯示錯誤

Private Sub showErr(errInfo)

Response.Write "

新宋體"", Arial"">"

Response.Write errInfo

Response.Write "

"

Response.End()

End Sub

End Class

%>

寶雞世紀網絡



0