获取字典的索引值

时间:2013-06-23 23:39:53

标签: vb.net dictionary

我有一段代码可以查看以下内容

public Test As Dictionary(Of String, String())

带入哪个

tester = New Dictionary(Of String, String())
tester.add("Key_EN", {"Option 1_EN", "Option 2_EN", "Option 3_EN"})
tester.add("Key_FR", {"Option 1_FR", "Option 2_FR", "Option 3_FR"})
tester.add("Key_DE", {"Option 1_DE", "Option 2_DE", "Option 3_DE"})

然后有一个组合框,它会查看以下内容

dim Language as string
Language = "_EN" ' note this is done by a drop down combo box to select _EN or _FR etc.
cboTestBox.items.AddRange(tester("Key" & Language))

我需要做的是查看答案所在的索引位置并将其转换回Key_EN。

因此,例如选择了_DE,然后将显示“选项1_DE”,“选项2_DE”,“选项3_DE”的选项。如果他们选择了Option 3_DE,那么我需要能够将其转换为Option 3_EN。

非常感谢 Maudise

2 个答案:

答案 0 :(得分:1)

你无法真正了解字典条目的索引,即使你做了,也不会对你有好处,因为你不能用它来访问密钥或值(我花了很多钱)时间试图解决这个问题无济于事。)

最简单的选择是构建反向查找字典,将组合键值映射回顶级键,假设组合值都是唯一的:

    Dim oReverseLookup As New Dictionary(Of String, String)

    For Each sKey As String In Tester.Keys
        For Each sValue As String In Tester(sKey)
            oReverseLookup.Add(sValue, sKey)
        Next
    Next

然后,当您选择了组合值时,您可以恢复原始密钥:

    Dim sSelectedComboValue As String
    sSelectedComboValue = "Option 3_DE"

    If oReverseLookup.ContainsKey(sSelectedComboValue) Then
        ' This will print Key_DE
        Debug.Print("Master Key Value " & oReverseLookup(sSelectedComboValue))
    End If

答案 1 :(得分:0)

您可以从组合框中获取值并解析字符串。您知道它将在您要更改的部分之前包含_。因此,只需处理字符串以查找_之前的数值,然后将其插入另一个字符串Option X_EN,方法是将其替换为X,或者将其与Option和{{1}连接起来}}

但是你要做的事情似乎是一种非常人为的方式来做这件事......