Convert array to dictionary in Visual Basic

Edit ArticleEdit Article

This Visual Basic example shows how to group the array of the elements into the dictionary by using the key selector

Sub main()

    Dim strArr(6) As String
    strArr(0) = "A"
    strArr(1) = "B"
    strArr(2) = "C"
    strArr(3) = "A"
    strArr(4) = "B"
    strArr(5) = "C"
    strArr(6) = "C"
    Dim groups As Object
    Set groups = ToDictionary(strArr)

    'A x 2
    'B x 2
    'C x 3
    For Each key In groups.Keys
        Debug.Print key & " x " & UBound(groups.Item(key)) + 1
End Sub

Function ToDictionary(arr As Variant) As Object
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    If Not IsEmpty(arr) Then
        For Each elem In arr
            Dim group() As Variant
            Dim key As Variant
            key = KeySelector(elem)
            If dict.Exists(key) Then
                group = dict.Item(key)
                ReDim Preserve group(UBound(group) + 1)
                group(UBound(group)) = elem
                dict.Item(key) = group
                ReDim group(0)
                group(0) = elem
                dict.Add key, group
            End If
    End If

    Set ToDictionary = dict
End Function

'modify the key selector to work with complex structures if required
Function KeySelector(elem As Variant) As Variant
    KeySelector = elem
End Function

Product of Xarial Product of Xarial