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


All articles and code at CodeStack are now open-source and hosted on GitHub. If you want to contribute by modifying existing articles and code snippets, submitting new ones, reporting errors and bugs etc. please follow this blog post for more information. We appreciate any contribution.

Product of Xarial Product of Xarial