10

由于遗留应用程序,我将一些 C# 代码移植到 VB6。我需要存储对列表。我不需要进行关联查找,我只需要能够存储成对的项目。

我要移植的片段如下所示:

List<KeyValuePair<string, string>> listOfPairs;

如果我要将它移植到 C++,我会使用这样的东西:

std::list<std::pair<string, string> > someList;

如果这是python,我只会使用一个元组列表。

someList.append( ("herp", "derp") )

我正在寻找一种图书馆类型,但如有必要,我会选择其他东西。我试图变得懒惰,不必编写 cYetAnotherTinyUtilityClass.cls 来获得此功能,或者退回到经常被滥用的字符串操作

我试过用谷歌搜索,但 VB6 并没有真正在网上很好地记录下来,而且有很多东西,都受到了很大的挑战。如果您曾经看过BigResource,您就会明白我的意思。

4

5 回答 5

8

变体的集合可以非常灵活,除非你真的击败它们,否则性能不是问题:

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
于 2012-09-01T01:07:43.997 回答
7

如果它实际上只是用于存储,您可以使用Type

Public Type Tuple
    Item1 As String
    Item2 As String
End Type

它比需要一个类来进行存储更简洁。

Types(更广泛地称为 UDT)的问题在于您可以使用它们做什么受到限制。您可以制作一个 UDT 数组。您不能收集UDT。

就 .Net 而言,它们与 .Net 最相似Struct

这里这里有基本的演练。

于 2012-08-31T20:36:37.177 回答
0

列出类?(见 VB 部分):http: //msdn.microsoft.com/en-us/library/6sh2ey19#Y0

字典类? http://msdn.microsoft.com/en-us/library/xfhwa508

于 2012-08-31T20:38:24.850 回答
0

你可以使用一个集合

dim c as new collection
c.add "a", "b"
于 2012-08-31T20:38:27.423 回答
0

我有一个类似的场景,并通过在我的 VB6 项目中包含对Microsoft Scripting Runtime库的引用来使用 Dictionary 。这是我的一位同事提出的,效果很好。

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
于 2021-01-15T09:21:26.240 回答