0

少しジレンマがあります。ハッシュ {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

渡されたオブジェクトは明らかに、上で定義した配列です。誰かがこれを行う賢い方法を持っているなら、それは大歓迎です。

4

1 に答える 1

0

渡されたハッシュを使用してエンドポイントで問題を解決し、渡されたハッシュのコピーである新しいハッシュを作成し、最後に渡されたハッシュをリセットし、キーと値=をハッシュに設定しましたコピーしました。これにより、ハッシュのハッシュが正常に作成されます

于 2012-05-22T07:58:14.290 に答える