asp的ArrayList類

<%
'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
%>
 

發佈了28 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章