VBA 使用 mscorlib总的arraylist拓展自身的array的功能

利用对com开放的类,拓展vba的功能

ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本。在VBA中,ArrayList提供了丰富的功能,包括排序、数组转换、动态的增加和减少元素、删除所有元素项目等。


相比字典,ArrayList的优势有:可以写入重复的item,并可查找;可以在指定索引位置插入item;可以选择对item进行排序或不排序(包括去重排序);可以通过item或索引删除(排序前排序后都可以);
劣势则是对大量数据的处理效率不够高。

内容:
ArrayList的使用非常简单,大概可分为以下几个部分:
1.创建ArrayList
2.添加或插入item
3.查找或删除item(可清空所有数据)
4.排序
5.复制
6.输出(可转数组)
7.释放(删除)arrList

通常必要的部分是1,2,6,其他部分可自由选择与组合使用。

Public Sub SortArray(ByRef arr As Variant)
    Dim arrlist As Object, i As Long, rtn As Variant
    Set arrlist = CreateObject("System.Collections.ArrayList")
    For i = LBound(arr) To UBound(arr)
        arrlist.Add arr(i)
    Next
    Erase arr
    arrlist.Sort
    rtn = arrlist.toarray()
    Set arrlist = Nothing
    arr = rtn
End Sub
    
Public Sub ArrayRemoveEleAt(ByRef arr As Variant, index As Long)
    Dim arrlist As Object, i As Long, rtn As Variant
    Set arrlist = CreateObject("System.Collections.ArrayList")
    For i = LBound(arr) To UBound(arr)
        arrlist.Add arr(i)
    Next
    Erase arr
    arrlist.removeat index
    rtn = arrlist.toarray()
    Set arrlist = Nothing
    arr = rtn
End Sub
Public Function ArrayContainsEle(ByRef arr As Variant, ele As Variant) As Boolean
    Dim arrlist As Object, i As Long, rtn As Boolean
    Set arrlist = CreateObject("System.Collections.ArrayList")
    For i = LBound(arr) To UBound(arr)
        arrlist.Add arr(i)
    Next
    rtn = arrlist.contains(ele)
    Set arrlist = Nothing
    ArrayContainsEle = rtn
End Function
    
Public Sub ReverseArray(ByRef arr As Variant)
    Dim arrlist As Object, i As Long, rtn As Variant
    Set arrlist = CreateObject("System.Collections.ArrayList")
    For i = LBound(arr) To UBound(arr)
        arrlist.Add arr(i)
    Next
    Erase arr
    arrlist.Reverse
    rtn = arrlist.toarray()
    Set arrlist = Nothing
    arr = rtn
End Sub

检查元素的包含,其余的大家自己测试

 

posted @ 2022-07-24 15:02  南胜NanSheng  阅读(799)  评论(0)    收藏  举报