如何从VB.NET中的值中获取哈希表键名?

如何从VB.NET中的值中获取哈希表键名?,vb.net,hashtable,Vb.net,Hashtable,我在VB.NET中有一个哈希表,我需要从它的值中获取一个键的字符串值。例如,如果我这样做: hashtable.add("string1","string2") 如果我有“string2”,我如何得到值“string1”?你不能(至少不能不简单地循环遍历每个值)。考虑多个键可以映射到相同值的事实: hashtable.Add("string1", "string2") hashtable.Add("string3", "string2") 现在给定“string2”,您希望返回什么 如果您真

我在VB.NET中有一个哈希表,我需要从它的值中获取一个键的字符串值。例如,如果我这样做:

hashtable.add("string1","string2")
如果我有“string2”,我如何得到值“string1”?

你不能(至少不能不简单地循环遍历每个值)。考虑多个键可以映射到相同值的事实:

hashtable.Add("string1", "string2")
hashtable.Add("string3", "string2")
现在给定“string2”,您希望返回什么


如果您真的需要进行“反向”查找,那么最简单的解决方案是可能有两个哈希表,一个用于“正向”查找,另一个用于“反向”查找。

正如Dean/codeka所说,您不能严格地这样做

但是,您可以这样做,因为哈希表的
的顺序相同(未指定):

但我还是要从以下几点开始:

Dim dt as New Dictionary(Of String, String)
您可以将其添加为扩展方法,如下所示:

Imports System.Runtime.CompilerServices

Module StringExtensions

    <Extension()> 
    Public Function FirstKeyForValue(ByVal Hashtable as ht, ByVal value As String) As String
      return ht.Values.OfType(Of String)() _
      .Select(Function(htI, i) New With { .Key = keys(i), .Value = htI }) _
      .Where(Function(htKVP) htKVP.Value = "str2") _
      .Select(Function(htKVP) htKVP.Key) _
      .FirstOrDefault()        
    End Function

End Module
导入System.Runtime.CompilerServices
模块扩展
公共函数FirstKeyForValue(ByVal哈希表作为ht,ByVal值作为字符串)作为字符串
返回类型(字符串)()的ht.Values_
.Select(函数(htI,i)用{.Key=keys(i),.Value=htI}新建)_
.Where(函数(htKVP)htKVP.Value=“str2”)_
.选择(功能(htKVP)htKVP.Key)_
.FirstOrDefault()
端函数
端模块

那么这是唯一的方法了?在VB.NET中是否有一个结构可以做到这一点?我正在尽量减少代码,因为哈希表可能会变得很大。@Steven:我不知道。拥有两个应该没什么大不了的,因为您可以构建一个包装类来管理它,而且集合只存储引用,所以额外的数据量将是最小的。谢谢您的帮助!我想我会用两个。我很感激。
Dim dt as New Dictionary(Of String, String)
Imports System.Runtime.CompilerServices

Module StringExtensions

    <Extension()> 
    Public Function FirstKeyForValue(ByVal Hashtable as ht, ByVal value As String) As String
      return ht.Values.OfType(Of String)() _
      .Select(Function(htI, i) New With { .Key = keys(i), .Value = htI }) _
      .Where(Function(htKVP) htKVP.Value = "str2") _
      .Select(Function(htKVP) htKVP.Key) _
      .FirstOrDefault()        
    End Function

End Module