少しジレンマがあります。ハッシュ {HASH} を示す配列の最初の要素に文字列を含む配列の配列を受け取りました。異なる呼び出しの結果に基づいて異なる可能性がある配列の配列の構造を知りません。データの例は次のとおりです。
[ [ "{HASH}", 1000, ["{HASH}", "A", 100], ["{HASH}", "B", 150], ["{HASH}", "C", 200] ],
[ "{HASH}", 1001, ["{HASH}", "D", 101], ["{HASH}", "E", 151], ["{HASH}", "F", 201] ]
]
ハッシュは次のようになります。
{1000}{A}=100
{1000}{B}=150
{1000}{c}=200
{1001}{D}=101
{1001}{E}=151
{1001}{F}=201
配列内のエントリを出力するために再帰的に呼び出される次の関数を作成しましたが、これは問題ありませんが、これを定義どおりにハッシュに入れる必要があり、再帰的に呼び出されるとハッシュがリセットされるため、これが失敗する場所です等:
Public Function ProcessObjOrArray(Obj As Variant, key As String, ByRef hashIn, HashCreated As Boolean) As Variant
Dim sKey As String
Dim i As Integer
Dim objRes As Variant
If HashCreated = False Then
Dim hash
HashCreated = True
Set hash = CreateObject("Scripting.Dictionary")
End If
If IsArray(Obj) Then
For i = 0 To UBound(Obj, 1)
objRes = ProcessObjOrArray(Obj(i), sKey, hash, HashCreated)
If (objRes = "{HASH}") Then
i = i + 1
sKey = Obj(i)
End If
Next i
If key <> "" Then
Debug.Print "Adding {" + key + "}=AllTheStuff"
Set hash.Item(key) = hashIn
Dim a
a = hash.Item(key)("Enabled")
Exit Function
End If
Else
If key <> "" Then
Debug.Print "Adding {" + key + "}=" + CStr(Obj)
hash.Item(key) = Obj
Else
ProcessObjOrArray = Obj
End If
End If
End Function
渡されたオブジェクトは明らかに、上で定義した配列です。誰かがこれを行う賢い方法を持っているなら、それは大歓迎です。