適用于初學者的asp數組類 |
作者:佚名 發布時間:2011-12-31 瀏覽:2267次 |
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):在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 ’名稱:數組操作類 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 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 " Response.Write errInfo Response.Write " Response.End() End Sub End Class %> |