是否可以在不迭代整个列表的情况下计算ArrayList中项目的唯一实例的数量?这是我的代码,我想在不迭代整个列表的情况下计算Orange的实例数-我希望有一种方法可以做到这一点?实际上,实际的ArrayList将具有数十万个项目。
Private Sub TestArrayList2()
Dim TestAR As Object
Dim Count As Integer
Set TestAR = CreateObject("System.Collections.ArrayList")
TestAR.Add "Apple"
TestAR.Add "Orange"
TestAR.Add "Orange"
TestAR.Add "Orange"
TestAR.Add "Pear"
Count = TestAR.Count
End Sub
答案 0 :(得分:5)
我找不到内置的单个函数,但是一旦对数组列表进行了排序,就可以很容易地找到字符串的第一个(.IndexOf
和最后一个(.lastIndexOf
)出现的位置正在寻找:
lookingfor = "Orange"
TestAR.Sort
occurrences = TestAR.lastIndexOf(lookingfor) - TestAR.IndexOf(lookingfor, 0) + 1
答案 1 :(得分:4)
您可以使用.Toarray,然后过滤Array:
Private Sub TestArrayList2()
Dim TestAR As Object
Dim Count As Integer, CountOrange As Long
Set TestAR = CreateObject("System.Collections.ArrayList")
TestAR.Add "Apple"
TestAR.Add "Orange"
TestAR.Add "Orange"
TestAR.Add "Orange"
TestAR.Add "Pear"
CountOrange = UBound(Filter(TestAR.toarray, "Orange", True, vbTextCompare)) + 1
'or Siddharth's
MsgBox Application.Count(Application.Match(TestAR.toarray, Array("Orange"), 0))
End Sub
答案 2 :(得分:0)
我不知道您是否真的需要它成为Iron Man
,但您可以像这样使用ArrayList
:
Scripting.Dictionary