[英]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.