String 从VBA集合中快速删除重复字符串

String 从VBA集合中快速删除重复字符串,string,vba,list,collections,String,Vba,List,Collections,MyCollection中目前有8000个电子邮件条目。我想从这个大列表中删除冗余元素,但速度更快 如何加速这段代码?我有一些建议,它非常简单,而且必须有效 当然有一些“但是”和主要的“但是”: 你必须有足够的记忆力 删除计数必须足够高 建议:不要逐个元素删除 而不是删除:创建新集合,而不创建不需要的记录 之后:把旧的收藏品全部扔掉。8000万?那么800万?您的问题很难理解,但避免重复的最佳方法是在最初存储数据时使用dictionary对象而不是集合。存储的是什么样的数据?您的方法需要多长

MyCollection中目前有8000个电子邮件条目。我想从这个大列表中删除冗余元素,但速度更快


如何加速这段代码?

我有一些建议,它非常简单,而且必须有效

当然有一些“但是”和主要的“但是”:

  • 你必须有足够的记忆力
  • 删除计数必须足够高
建议:不要逐个元素删除 而不是删除:创建新集合,而不创建不需要的记录


之后:把旧的收藏品全部扔掉。

8000万?那么800万?您的问题很难理解,但避免重复的最佳方法是在最初存储数据时使用dictionary对象而不是集合。存储的是什么样的数据?您的方法需要多长时间才能存储800万条记录?可能的重复不是800万条。这是个打字错误。编辑了我的问题。问题的要点是,清单很大,这会造成滞后,因此我希望加快这一进程。有更好的代码吗?一切都取决于比率:你的删除计数越大,列表的重新创建就越有效。显然,插入的次数会减少,删除的次数会减少,而不会执行任何操作。另一方面:如果你删除了可笑的行数,那么删除根本不是问题,问题是过滤。谢谢你提供了一个想法。我不确定“创建一个没有多余记录的新集合”的含义。我的代码实际上就是这样做的!这样如何:将列表划分为多个较小的列表,并删除每个列表的冗余。然后将列表合并为一个大列表,并删除此合并列表的冗余。这会更快吗?关于划分越来越小的数据集:现代RAM子系统不喜欢很多小的操作,当您将许多小的操作组合成厚批时会更好。
Dim MyCollection As VBA.Collection
Set MyCollection = New VBA.Collection

For i = MyCollection.Count To 1 Step -1
    For j = (i - 1) To 1 Step -1
        If MyCollection(i) = MyCollection(j) Then
            MyCollection.Remove i
            Exit For
        End If
    Next j
Next i