更新存储在VBA字典中的数组

我正在创build一个使用嵌套字典和最低级别的列表的数据结构。 以下是我的数据示例:

Country, Customer, Purchased US, Alan, Lawnmower US, Alan, Hammer US, Karen, Donkey US, Simon, Mustang MX, Carl, Lawnmower MX, Alan, Donkey ... 

我想到的数据结构看起来像dictionary --> dictionary --> array – 即, country --> customer --> purchased 。 计划是为每个dictionary --> dictionary有一个新的数组dictionary --> dictionary组合。

但是,当我尝试更新数组时,它似乎链接到dictionary --> dictionary所有较低级别dictionary --> dictionary结构。 也就是说,第三行处理完之后,有以下情况:

 US --> Alan --> [Lawnmower, Hammer, Donkey] US --> Karen --> [Lawnmower, Hammer, Donkey] 

…而我期望看到的是:

 US --> Alan --> [Lawnmower, Hammer] US --> Karen --> [Donkey] 

这是我正在尝试使用的代码:

 i_p = UBound(purchased_array) Redim Preserve purchased_array(i_p + 1) purchased_array(i+p + 1) = item ' new item to add to the array dataset(country)(customer) = purchased_array 

但是,这会导致基本相同的数组被dictionary --> dictionary结构的每个最低级别引用。

任何想法,我在做什么错了?

如果在字典中有数组,则必须先将其从字典中提取出来,然后才能对其进行修改。 然后放回去。

 Sub Tester() Dim x As Long, y As Long Dim dict As New Scripting.Dictionary Dim d As Scripting.Dictionary Dim arr For x = 1 To 3 Set d = New Scripting.Dictionary For y = 1 To 3 d.Add "nextkey" & y, Array("A_" & x & "_" & y, _ "B_" & x & "_" & y) Next y dict.Add "key" & x, d Next x Debug.Print Join(dict("key1")("nextkey1"), ", ") '>> A_1_1, B_1_1 'try to modify array while stored in dictionary... dict("key1")("nextkey1")(1) = "newValue1" '<<< doesn't work! Debug.Print Join(dict("key1")("nextkey1"), ", ") '>> A_1_1, B_1_1 'have to pull it out of the dictionary if you want to change it... arr = dict("key1")("nextkey1") arr(1) = "newValue2" dict("key1")("nextkey1") = arr Debug.Print Join(dict("key1")("nextkey1"), ", ") '>> A_1_1, newValue2 End Sub 

字典包含成对的对。 此外,词典中的键列表必须是唯一的。 在包含Country&Customer之间关系的顶级字典中,国家和客户都不是该标准唯一的。 所以,我不认为字典是适当的。 也许你可以尝试Dictionary -> Array -> Array