【问题标题】:Can a dictionary object have multiple Items under same key?字典对象可以在同一个键下有多个项目吗?
【发布时间】:2019-02-10 01:55:33
【问题描述】:

我正在寻找与字典对象项相关的解决方法

Dim a, d 'Create some variables

 Set d = CreateObject("Scripting.Dictionary")

 d.Add "a", "Athens" 'is possible I know 

 d.Add "a", "Athens","India","Paris" ' Is this Possible  under same Key?

描述快照:(已更新

  Manger ID            EMPID      EMPID     EMPID     EMPID ......

     11                12          10
     15                10 
     20                22          45        46
     40

然后如何使用字典对象来实现上表?给我一些想法。

谢谢,

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    编辑:使变量名更易于操作

    编辑:为 OP 的 reading 包含 Scripting.Dictionary 参考

    Sub t()
        Dim d
        Dim a
        a = Array("Athens", "India", "Paris")
        Set d = CreateObject("Scripting.Dictionary")
        d.Add "a", a
        MsgBox Join(d.Item("a"), ",")
    End Sub
    

    编辑:将 OP 问题中的值读入字典并检索值

    Sub t()
        Dim d As Object
        Dim values
        Dim height As Long
        Dim item
        Dim width As Long
        Dim i As Long, j As Long
        Dim MANGERID
        Dim EMPIDs
        Dim EMPID
        With ActiveSheet
            height = .Cells(.Rows.Count, 1).End(xlUp).Row
            If height < 2 Then
                Exit Sub
            End If
            Set d = CreateObject("Scripting.Dictionary")
            For i = 2 To height
                width = .Cells(i, .Columns.Count).End(xlToLeft).Column
                if width > 1 then  'make sure have EMPID
                    ReDim values(1 To width - 1)
                    Key = .Cells(i, 1).Value
                    For j = 2 To width
                        values(j - 1) = .Cells(i, j).Value
                    Next j
                    d.Add Key, values
                end if
            Next i
    
            'displaying back the items in the dictionary
            For Each MANGERID In d.keys
                'value array
                EMPIDs = d.item(MANGERID)
                If TypeName(EMPIDs) = "Variant()" Then
                    For Each EMPID In EMPIDs
                        Debug.Print MANGERID & ":" & EMPID
                    Next EMPID
                End If
            Next MANGERID
    
            Set d = Nothing
        End With
    End Sub
    

    【讨论】:

    • 你可以为我更新的描述编写相同的代码吗,本质上是动态的?
    • 你的意思是你的“描述快照:”部分是输入的excel部分,你想把它们存储在字典里吗?
    • @TukaiRakshit 一篇非常好的关于 Dictionary experts-exchange.com/Software/Office_Productivity/Office_Suites/… 的文章
    • 您一次想要一个 Manger ID 还是一次想要一个 EMPID?在我的代码中,For Each Key In d.keys 正在循环 Manger ID,Value 是存储 EMPID 的数组元素,您可以将 Value 作为数组循环
    • 对于这个问题,你应该学会隔离问题..写一个vbs只用固定a到b的那个lune ..
    【解决方案2】:

    没有。根据定义,字典数据类型使用必须唯一的键。我知道在大多数实现中都是这样,但我能找到的最接近 VBscript 的Scripting.Dictionary 权威参考的是TechNet blurb

    键是唯一的条目:单个 Dictionary 对象中的两个键不能相同。

    【讨论】:

    • 我在找如果同一个键可以包含多个值吗?
    • 我认为在这种情况下你会有一个数组字典。
    • 我更新了主题描述,你能看一下吗?并给我建议。
    【解决方案3】:

    对于其他看到此问题并需要另一种方法来解决此问题的其他人来说,这是另一个示例。我觉得这会有所帮助。

    Dim objDictionary
    Set objDictionary = CreateObject("Scripting.Dictionary")
        dicKey = 69
        dicValues = ""
        dicVal = "val1"
        dicVal2 = "val2"
        dicVal3 = "val3"
        objDictionary.add dicKey, DicValues1 & DicValues2
        chang = -1
    
    if chang = -1 then  
        objDictionary.item(dicKey) = dicVal & "," & dicVal2
        chang = -69
    end if
    
    if chang = -69 then
        objDictionary.item(dicKey) = dicVal3 & ", " & dicVal & ", " & dicVal2
        chang = -1
    end if
    
    for each objDictionary_key in objDictionary.keys
        msgbox "Key: " & objDictionary_Key & " Value: " & objDictionary.item(objDictionary_Key)
    next 
    

    希望对大家有所帮助!

    【讨论】:

      【解决方案4】:

      如果您尝试在一个键中添加多个项目,则会出现重复键,而 Vb 脚本不允许这样做。 要了解有关字典对象的更多信息,请参阅以下链接。 How To Use Dictionary Object

      【讨论】:

        猜你喜欢
        • 2021-09-01
        • 2011-10-12
        • 2023-04-10
        • 2012-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多