在ASP中,普通数组无法直接实现键值对操作,但可以通过结构重组模拟类似效果。以下是使用数组模拟字典结构的实现方法:
<% ' 初始化results主数组 Dim results() ReDim results(-1) ' 初始为空数组 ' 创建父节点结构(用数组模拟字典) Dim parentDict(1) parentDict(0) = "children" ' 键名 parentDict(1) = Array() ' 值初始化为空数组 ' 创建子节点结构(用数组模拟字典) Dim childDict(2) childDict(0) = "key1" childDict(1) = "value1" childDict(2) = "otherData" ' 将子节点添加到父节点的children集合 Dim tempChildren tempChildren = parentDict(1) ' 获取当前children数组 ReDim Preserve tempChildren(UBound(tempChildren) + 1) tempChildren(UBound(tempChildren)) = Array(1, childDict) ' 存储键值对 parentDict(1) = tempChildren ' 回写修改后的children数组 ' 将父节点添加到主results数组 ReDim Preserve results(UBound(results) + 1) results(UBound(results)) = Array(1, parentDict) ' 存储键值对 ' 示例访问方式: For Each item In results If item(0) = 1 Then ' 通过键值查找 parentNode = item(1) Response.Write "Parent Node Children Count: " & UBound(parentNode(1)) + 1 End If Next %>
代码说明:
数据结构设计:
使用Array(key, value)格式存储键值对
多维数组存储复合结构(如parentDict包含多个属性)
核心操作:
' 添加元素操作模板 tempArray = originalArray ReDim Preserve tempArray(UBound(tempArray) + 1) tempArray(UBound(tempArray)) = NewElement originalArray = tempArray
优势与妥协:
✅ 纯数组实现,无需Scripting.Dictionary
❗ 查找需遍历数组(建议维护索引字典提升性能)
❗ 代码复杂度高于字典实现
封装类:
<%
' 带索引缓存的优化版本 
Class ArrayDictionary 
    Private dataArray 
    Private indexMap 
 
    Private Sub Class_Initialize()
        ReDim dataArray(-1)
        Set indexMap = Server.CreateObject("Scripting.Dictionary")
    End Sub 
 
    Public Sub Add(key, value)
        If Not indexMap.Exists(key) Then 
            ReDim Preserve dataArray(UBound(dataArray) + 1)
            dataArray(UBound(dataArray)) = value 
            indexMap.Add key, UBound(dataArray)
        End If 
    End Sub 
 
    Public Property Get Item(key)
        If indexMap.Exists(key) Then 
            Item = dataArray(indexMap(key))
        End If 
    End Property 
End Class 
 
' 使用示例:
Set results = New ArrayDictionary 
Set parentDict = New ArrayDictionary 
Set childDict = New ArrayDictionary 
 
parentDict.Add "children", New ArrayDictionary 
parentDict("children").Add 1, childDict 
results.Add 1, parentDict 
%>