VBScript 中的动态数组可以通过以下几种方式实现:
' 声明动态数组
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)
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
' 使用动态数组类
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()
' 动态数组工具函数
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
' 创建动态数组
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 只能调整最后一维的大小
这些实现方式可以根据具体需求选择使用,第一种方式最常用,第二种提供了面向对象的封装,第三种则提供了函数式的操作方式。