我正在生成按从1到pmax的数字索引的gcard人员的临时组
问题是集合"persone“总是一样的……gruppi(i)为每个"i“引用相同的"persone”
我想在每个"gruppi(i)“中都有一个新的集合,我该怎么做呢?
Dim gruppi As New Collection
Dim persone As New Collection
gmax = -Int(-(pmax / gcard))
conta = 1
For g = 1 To gmax
gruppi.Add persone
'ciclo sulle persone del gruppo
For p = 1 To gcard
cas = Round(Rnd() * (pmax - 1) + 1, 0)
riprova:
'check if cas was generated before
For i = 1 To gruppi.Count
For j = 1 To gruppi(i).Count
If gruppi(i)(j) = cas Then
cas = Round(Rnd() * (pmax - 1) + 1, 0)
GoTo riprova
End If
Next
Next
continua:
'person "cas" not present, ok let's add it!
gruppi(g).Add cas
'MsgBox "gruppi -> " & gruppi.Count
'MsgBox "persone nel gruppo " & g & " -> " & gruppi(g).Count
conta = conta + 1
If conta > pmax Then GoTo esci
Next p
Next g
esci:发布于 2018-02-14 00:24:16
这是因为
Dim gruppi As New Collection
Dim persone As New Collection
For g = 1 To gmax
gruppi.Add persone
....对于可能添加的每个gruppi项,您都会引用相同的persone对象...
然后你想要使用:
Dim gruppi As New Collection
For g = 1 To gmax
gruppi.Add New Collection ' add a new collection as the new item of 'gruppi' collection
....顺便说一句,它允许声明和使用较少的对象变量
由于最佳实践是声明和实例化
https://stackoverflow.com/questions/48766682
复制相似问题