Comparison of Dictionary, Collections and Arrays

前端 未结 4 1109
情深已故
情深已故 2020-11-30 21:10

I am trying to work out the relative benefits and features of dictionaries compared with collections and arrays.

I found an excellent article here but can\'t find a

4条回答
  •  野性不改
    2020-11-30 21:31

    Option Explicit
    
    Sub UpdateSummary()
    
        Dim varData
        Dim objDicCountry As Object
        Dim objDicCity As Object
        Dim objDicData As Object
        Dim lngR As Long
        Dim varResult
        Dim lngC As Long
        Dim strKey As String
        Dim varUnique
    
        varData = Sheet12.Range("A1").CurrentRegion
        Set objDicCity = CreateObject("Scripting.Dictionary")
        Set objDicCountry = CreateObject("Scripting.Dictionary")
        Set objDicData = CreateObject("Scripting.Dictionary")
    
        For lngR = LBound(varData) + 1 To UBound(varData)
    
            strKey = varData(lngR, 1) '--Country
            objDicCountry.Item(strKey) = ""
    
            strKey = varData(lngR, 2) '--City
            objDicCity.Item(strKey) = ""
    
            strKey = varData(lngR, 1) & "|" & varData(lngR, 2) '--Country and City
            objDicData.Item(strKey) = objDicData.Item(strKey) + varData(lngR, 3)
    
        Next lngR
    
        ReDim varResult(1 To objDicCountry.Count + 1, 1 To objDicCity.Count + 1)
    
        varUnique = objDicCountry.keys '--get Unique Country
    
        For lngR = LBound(varUnique) To UBound(varUnique)
            varResult(lngR + 2, 1) = varUnique(lngR)
        Next lngR
    
        varUnique = objDicCity.keys '--get Unique City
    
        For lngC = LBound(varUnique) To UBound(varUnique)
            varResult(1, lngC + 2) = varUnique(lngC)
        Next lngC
    
    
        For lngR = LBound(varResult) + 1 To UBound(varResult)
            For lngC = LBound(varResult) + 1 To UBound(varResult, 2)
                strKey = varResult(lngR, 1) & "|" & varResult(1, lngC) '--Country & "|" & City
                varResult(lngR, lngC) = objDicData.Item(strKey)
            Next lngC
        Next lngR
    
        Sheet12.Range("F6").Resize(UBound(varResult), UBound(varResult, 2)).Value = varResult
        MsgBox "Done", vbInformation
    
    End Sub
    

提交回复
热议问题