徐州市文章资讯

VBScript 动态 Array 的实现代码

2026-04-24 15:29:04 浏览次数:0
详细信息

VBScript 中的动态数组可以通过以下几种方式实现:

1. 使用 Redim 调整数组大小

' 声明动态数组
Dim arr()

' 初始分配
ReDim arr(2)
arr(0) = "Apple"
arr(1) = "Banana"
arr(2) = "Cherry"

' 增加数组大小(保留现有数据)
ReDim Preserve arr(5)
arr(3) = "Date"
arr(4) = "Elderberry"
arr(5) = "Fig"

' 减小数组大小(会丢失超出部分的数据)
ReDim Preserve arr(3)

2. 动态数组操作类(封装常用功能)

Class DynamicArray
    Private arr()
    Private currentSize

    Private Sub Class_Initialize()
        ReDim arr(-1) ' 初始为空数组
        currentSize = 0
    End Sub

    ' 添加元素
    Public Sub Add(item)
        If currentSize = 0 Then
            ReDim arr(0)
        Else
            ReDim Preserve arr(currentSize)
        End If
        arr(currentSize) = item
        currentSize = currentSize + 1
    End Sub

    ' 获取元素
    Public Function GetItem(index)
        If index >= 0 And index < currentSize Then
            GetItem = arr(index)
        Else
            GetItem = Null
        End If
    End Function

    ' 设置元素
    Public Sub SetItem(index, value)
        If index >= 0 And index < currentSize Then
            arr(index) = value
        End If
    End Sub

    ' 获取数组大小
    Public Function Size()
        Size = currentSize
    End Function

    ' 清空数组
    Public Sub Clear()
        Erase arr
        currentSize = 0
    End Sub

    ' 转换为普通数组
    Public Function ToArray()
        If currentSize > 0 Then
            ToArray = arr
        Else
            ToArray = Array()
        End If
    End Function

    ' 查找元素
    Public Function IndexOf(item)
        For i = 0 To currentSize - 1
            If arr(i) = item Then
                IndexOf = i
                Exit Function
            End If
        Next
        IndexOf = -1
    End Function

    ' 移除元素
    Public Sub Remove(index)
        If index >= 0 And index < currentSize Then
            ' 创建新数组并复制元素
            Dim newArr()
            ReDim newArr(currentSize - 2)

            For i = 0 To currentSize - 1
                If i < index Then
                    newArr(i) = arr(i)
                ElseIf i > index Then
                    newArr(i - 1) = arr(i)
                End If
            Next

            arr = newArr
            currentSize = currentSize - 1
        End If
    End Sub
End Class

3. 使用示例

' 使用动态数组类
Set da = New DynamicArray

' 添加元素
da.Add "张三"
da.Add "李四"
da.Add "王五"

WScript.Echo "数组大小: " & da.Size()
WScript.Echo "第二个元素: " & da.GetItem(1)

' 修改元素
da.SetItem(1, "赵六")

' 查找元素
WScript.Echo "赵六的索引: " & da.IndexOf("赵六")

' 移除元素
da.Remove(0)
WScript.Echo "移除后大小: " & da.Size()

' 转换为普通数组
Dim resultArray
resultArray = da.ToArray()

4. 实用函数集合

' 动态数组工具函数
Function CreateDynamicArray()
    Dim arr()
    ReDim arr(-1)
    CreateDynamicArray = arr
End Function

Sub ArrayPush(ByRef arr, value)
    If Not IsArray(arr) Then
        ReDim arr(0)
        arr(0) = value
    Else
        Dim size
        size = UBound(arr) + 1
        ReDim Preserve arr(size)
        arr(size) = value
    End If
End Sub

Function ArrayPop(ByRef arr)
    If IsArray(arr) Then
        Dim size
        size = UBound(arr)
        If size >= 0 Then
            ArrayPop = arr(size)
            If size > 0 Then
                ReDim Preserve arr(size - 1)
            Else
                Erase arr
            End If
        Else
            ArrayPop = Null
        End If
    Else
        ArrayPop = Null
    End If
End Function

Function ArrayInsert(ByRef arr, index, value)
    If IsArray(arr) Then
        Dim size, i
        size = UBound(arr)

        ReDim Preserve arr(size + 1)

        ' 向后移动元素
        For i = size To index Step -1
            arr(i + 1) = arr(i)
        Next

        arr(index) = value
        ArrayInsert = True
    Else
        ArrayInsert = False
    End If
End Function

5. 使用示例

' 创建动态数组
Dim myArray
myArray = CreateDynamicArray()

' 添加元素
ArrayPush myArray, "元素1"
ArrayPush myArray, "元素2"
ArrayPush myArray, "元素3"

' 插入元素
ArrayInsert myArray, 1, "新元素"

' 遍历数组
For i = 0 To UBound(myArray)
    WScript.Echo "元素 " & i & ": " & myArray(i)
Next

' 弹出最后一个元素
WScript.Echo "弹出: " & ArrayPop(myArray)

注意事项:

性能考虑:频繁使用 ReDim Preserve 会影响性能,建议批量操作 数组索引:VBScript 数组默认从 0 开始 数据类型:VBScript 数组可以存储不同类型的数据 多维数组ReDim Preserve 只能调整最后一维的大小

这些实现方式可以根据具体需求选择使用,第一种方式最常用,第二种提供了面向对象的封装,第三种则提供了函数式的操作方式。

相关推荐