繁体   English   中英

VBA展平层次结构数组

[英]VBA Flatten Hierarchical array

我有一个层次化的数组,我想将其展平,以便于迭代。 在VBA中扁平化分层数组的最佳方法是什么?

视觉分级阵列中的:

s
    p
    t
        d
        n
x

平数组的外观

s
p
t
d
n
x

实现的分层数组:

Sub test()
    Dim s As String
    Dim v() As Variant
    v = Array("s", Array("p", "t", Array("d", "n")), "x")

    MsgBox printHier(v)
End Sub

Function printHier(v, Optional layer As Integer = 0) As String
    On Error GoTo ErrorHandler

    indent = layer * 4
    Do While indent > 0
        output = output & " "
        indent = indent - 1
    Loop
    printHier = output & CStr(v)

    Exit Function
ErrorHandler:
    For Each subv In v
        If printHier = vbNullString Then
            printHier = printHier(subv, layer + 1)
        Else
            printHier = printHier & vbNewLine & printHier(subv, layer + 1)
        End If
    Next subv
End Function

没有“最佳”方法,但是这是一种方法:

Sub test()
    Dim v() As Variant
    Dim arrout()

    v = Array("s", Array("p", "t", Array("d", "n", Array("x", "y"))), "x")
    ReDim arrout(0 To 0)
    Flatten v, arrout

    Debug.Print Join(arrout, ",")

End Sub

Sub Flatten(arrIn, arrout)
Dim v, a, ub
    For Each v In arrIn
        If TypeName(v) Like "*()" Then
            Flatten v, arrout
        Else
            If IsEmpty(arrout(0)) Then
                arrout(0) = v
            Else
                ub = UBound(arrout)
                ReDim Preserve arrout(0 To ub + 1)
                arrout(ub + 1) = v
            End If
        End If
    Next v
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM