计算ArrayList中唯一项的数量

时间:2019-09-17 08:59:56

标签: excel vba

是否可以在不迭代整个列表的情况下计算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

3 个答案:

答案 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