欢迎光临殡葬网
详情描述

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 只能调整最后一维的大小

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

相关帖子
电子合同签完发现名字打错了或者签错位置了,这份合同还算数吗?
电子合同签完发现名字打错了或者签错位置了,这份合同还算数吗?
休渔期补贴政策是如何平衡海洋生态保护和渔民基本生活保障的?
休渔期补贴政策是如何平衡海洋生态保护和渔民基本生活保障的?
徐州市正规殡葬服务-殡葬摄像服务,1小时随叫随到
徐州市正规殡葬服务-殡葬摄像服务,1小时随叫随到
正在租住公租房,如果家庭收入增加了会被要求退租吗?
正在租住公租房,如果家庭收入增加了会被要求退租吗?
徐州市殡葬一条龙|殡仪服务流程,丧事录像
徐州市殡葬一条龙|殡仪服务流程,丧事录像
在食用当季蔬果时,有哪些有效的家庭处理方法可以减少农残疑虑?
在食用当季蔬果时,有哪些有效的家庭处理方法可以减少农残疑虑?
因手机信号或系统问题导致无法按时核销,会被误判为爽约吗?
因手机信号或系统问题导致无法按时核销,会被误判为爽约吗?
2026年中考综合素质评价越来越重要,小学阶段该怎么帮孩子攒素材?
2026年中考综合素质评价越来越重要,小学阶段该怎么帮孩子攒素材?
当有意外收入时,将其转为储蓄而非消费的心理技巧有哪些?
当有意外收入时,将其转为储蓄而非消费的心理技巧有哪些?
对于刚参加工作不久的年轻人,租房提取住房公积金有哪些便利条件与渠道?
对于刚参加工作不久的年轻人,租房提取住房公积金有哪些便利条件与渠道?
近年有哪些新兴的行业或赛道获得了更多的创业政策倾斜?
近年有哪些新兴的行业或赛道获得了更多的创业政策倾斜?
过桥垫资费用如何核算?结合计费规则看懂单日收费与总成本计算
过桥垫资费用如何核算?结合计费规则看懂单日收费与总成本计算
房产抵押贷款相关法规解读,学法懂法保障抵押借贷行为合法合规
房产抵押贷款相关法规解读,学法懂法保障抵押借贷行为合法合规
台风来临前窗外突然变得安静,真的是风暴已经过去了吗?
台风来临前窗外突然变得安静,真的是风暴已经过去了吗?
押车贷款办理流程详解,签订借据时借款用途怎么填写?
押车贷款办理流程详解,签订借据时借款用途怎么填写?
大暑三候
大暑三候"腐草为萤、土润溽暑、大雨时行"该怎么理解?
解读相关法律法规对“最终解释权归本店所有”这类单方声明的具体规定
解读相关法律法规对“最终解释权归本店所有”这类单方声明的具体规定
2026年有没有更智能的个人收款码账单管理与分析工具?
2026年有没有更智能的个人收款码账单管理与分析工具?
房产证红本抵押贷款办理流程全解析,从申请到放款只需七步
房产证红本抵押贷款办理流程全解析,从申请到放款只需七步
头伏饺子二伏面三伏烙饼摊鸡蛋,这套吃法背后是哪里的民俗习惯?
头伏饺子二伏面三伏烙饼摊鸡蛋,这套吃法背后是哪里的民俗习惯?