VBA创建一个嵌套字典

时间:2015-08-31 18:23:27

标签: vba dictionary

我有以下一组代码

adapter = new SimpleAdapter(
            MainActivity.this, dataList,
            R.layout.list_item, new String[] { TAG_NAME, TAG_IBU, TAG_ABV},
            new int[] { R.id.name, R.id.ibu, R.id.abv });

我尝试做的是使用下面的列表作为示例,创建一个嵌套字典,每个字典都有自己的密钥。这样做的目的是因为我有一个报告,它会在添加之前检查上面为重复项创建的字典。

市---队

洛杉矶----湖人队

CHI ----公牛队

纽约----尼克斯队

DAL ----小牛队

BOS ----凯尔特人队

我能够创建第一个字典(城市),但我似乎无法根据城市为团队名称创建第二个(嵌套)字典。帮助会很棒。谢谢!

2 个答案:

答案 0 :(得分:6)

首先创建 - 然后将新字典添加到外部字典。以下子应该给你一些想法:

*([! ])

答案 1 :(得分:0)

我发现首先创建子词典并将其添加到主词典中非常容易。在这里,我有" paydownDictionary"作为主要的一个,我将子字典添加到具有两个值的子字典中。因此,如果您要将它应用于您的,那么您将获得每个城市的团队列表并说出例如:

子词典。添加快船,建立19 ??

子词典。加上湖人,建立了19 ??

如果城市发生变化

将子词典添加到词典中 然后为下一组创建一个新的子字典。我的代码看起来像 - 编辑后看起来更像你的代码

Option Explicit
Public CityDictionary As New Scripting.Dictionary

Sub theDictionary()

Dim wsName2 As String
Dim payDownDictionary As New Scripting.Dictionary 'set in public
Dim subDictionary As Scripting.Dictionary

wsName2 = ActiveSheet.Name
'keyColumn = city ' column A
'secondColumn = team 'column B

lastColumn = Sheets(wsName2).Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
lastRow = Sheets(wsName2).Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
previousCell = ""

For Each cell In xlfile.Sheets(wsName2).range(Sheets(wsName2).Cells(2, 1), Sheets(wsName2).Cells(lastRow, 1)) 'this is your key column

    If cell.Value <> "" Then

        If previousCell = "" Then 'it's the first item
        'get the first item and add it to the subdictionary
            Set subDictionary = New Scripting.Dictionary
            subDictionary.Add cell.Offset(0, 1).Value, cell.Offset(0, 2).Value 'offest 1 would be team, offset 2 is date established

        ElseIf cell.Value = previousCell Then 'we already have this cell value in the dictionary
            subDictionary.Add cell.Offset(0, 1).Value, cell.Offset(0, 2).Value

        Else ' new cell value for the dictionary
            'previousCell is your primaryKey Column
            CityDictionary.Add previousCell, subDictionary ' add the sub dictionary to the pay Down Dictionary

            Set subDictionary = New Scripting.Dictionary
            subDictionary.Add cell.Offset(0, 1).Value, cell.Offset(0, 2).Value

        End If
        previousCell = cell.Value
    End If
Next

我觉得如果你想走这条路,它可能比你的方法更清洁。

我在每个子字典中都有大约15到200,因为我正在考虑债券到期的利率。所以这种方式对我来说很棒,最多3个?在一个城市的NBA球队,它可能没有其他方法那么高效。