我在做什么?假定5个样本表。我遍历所有项目,并使用dictionary.exists方法仅添加唯一的项目。这样,我得到了一个具有唯一值的字典对象,问题是,我为此使用了相同的字典“ IDsDict”,并且我必须删除dict.items才能获得下一组唯一ID。
我想 a)从循环中单独“存储”字典,以便dict.RemoveAll不会影响该字典的副本 b)或为每次循环的新运行动态添加新字典
有可能吗?
For uniqueRow = LBound(IDsDataFiltered, 2) To UBound(IDsDataFiltered, 2)
If Not IDsDict.Exists(IDsDataFiltered(1, uniqueRow)) Then
counter = counter + 1
globalcounter = globalcounter + 1
'Add to Dictionaries
IDsDict.Add IDsDataFiltered(1, uniqueRow), globalcounter
End If
Next uniqueRow
collUniqueDicts.Add IDsDict, timeStampsIDs
IDsDict.RemoveAll
编辑:最终,我想找出不同表中的唯一ID集,并从这些表中返回其他列。应用:假定每个表都有ID,时间戳和位置。这样,我就可以跟踪ID在一段时间内的位置。
答案 0 :(得分:2)
您要存储5次相同的对象指针-.RemoveAll
会清除您在上一次运行中添加的项目,因此最终得到同一词典的5份副本,只有最后添加的项目(假设RemoveAll
不在上一次迭代中运行?)。
如果要5个对象,则需要5个不同的指针。
我将把填充字典的代码放入其自己的返回字典的函数中。
Private Dictionarize(...) As Dictionary
Dim result As Dictionary
Set result = New Dictionary
'...populate one dictionary
Set Dictionarize = result
End Function
为函数提供所需的参数,然后根据需要调用5次:
collUniqueDicts.Add Dictionarize(...)
答案 1 :(得分:0)
在每个样本处理之后,代替IDsDict.RemoveAll
创建一个新的Dictionary
:
Set IDsDict = New Dictionary