VB6 Tuple Equivalent?

If its literally just for storage you can use a Type:

Public Type Tuple
    Item1 As String
    Item2 As String
End Type

Its a bit more concise than needing a class to do the storage.

The problem with Types (known more widely as UDTs) is that there are restrictions on what you can do with them. You can make an array of a UDT. You cannot make a collection of a UDT.

In terms of .Net they're most similar to Struct.

There's a walkthrough of the basics here or here.


Collections of Variants can be quite flexible and unless you are really beating on them performance is not an issue:

Private Sub SomeCode()
    Dim Pair As Variant
    Dim ListOfPairs As Collection

    Set ListOfPairs = New Collection

    With ListOfPairs
        Pair = Array("this", "that")
        .Add Pair

        .Add Array("herp", "derp")

        .Add Array("weet", "tweet")

        MsgBox .Item(1)(0) 'Item index is base-1, array index base-0.

        Pair = .Item(2)
        MsgBox Pair(1)

        ReDim Pair(1)
        Pair(0) = "another"
        Pair(1) = "way"
        .Add Pair
        MsgBox .Item(4)(1)
    End With
End Sub

I had a similar scenario and used Dictionary by including a reference to Microsoft Scripting Runtime library in my VB6 project. This was suggested by a colleague of mine and worked really well.

Dim dictionary As New Dictionary
Dim index As Integer

dictionary.Add "Index1", "value for first index"
dictionary.Add "Index2", "value for second index"


'To get the value for a key
Debug.Print dictionary("Key1")

'To get the value for all keys
For index = 0 To UBound(dictionary.Keys)
    Debug.Print dictionary.Keys(index) & "=" & dictionary(dictionary.Keys(index))
Next index