<%
'ArrayList類功能描述:
'***************ArrayList屬性***************
'ArrayList.Length:數組長度
'***************ArrayList方法***************
'---數組添加:
'ArrayList.Add(v):在ArrayList尾部添加一個元素
'ArrayList.AddArray(arr):在ArrayList尾部附加一個數組
'ArrayList.Insert(index,v):在ArrayList的index處插入一個值,原先的index和之後的值都往後移
'ArrayList.InsertArray(index,arr):在ArrayList的index處插入一個數組,原先的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)返回ArrayList從m到n的一段數組
'ArrayList.GetArray()返回整個Array數組
'---數組其他操作:
'ArrayList.Reverse()將整個 ArrayList 中元素的順序反轉
'ArrayList.Implode(separator)返回字符串值,元素由指定的分隔符分隔開來
'******************************/
'/******************************
'類名:ArrayList
'名稱:數組操作類
'日期:2007-11-6
'作者:西樓冷月
'網址:www.xilou.net | www.chinaCMS.org
'描述:對數組的各種操作
'版權:轉載請註名出處,作者
'******************************
'最後修改:2007-11-6
'修改次數:0
'修改說明:
'目前版本:v1.0
'******************************/
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<arrLength And 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
'//返回ArrayList從m到n的一段數組
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 "<div id=""ERRORINFO"" style=""font-size:12px;color:#990000;font-family:""新宋體"", Arial"">"
Response.Write errInfo
Response.Write "</div>"
Response.End()
End Sub
End Class
%>