【问题标题】:How to get key of hashtable by value如何按值获取哈希表的键
【发布时间】:2012-05-30 19:33:35
【问题描述】:

我可以按值获取哈希表的键吗?我尝试查找和编码,但没有成功。任何人都可以帮助我。

非常感谢

【问题讨论】:

  • 我感觉您没有使用正确的数据结构来实现您想要实现的目标。
  • 虽然这个问题措辞不好,细节也很少,但这里有一个独特而真实的问题。

标签: c# key hashtable


【解决方案1】:

如果您使用的是Hashtable class,则返回的枚举数是IDictionaryEnumerator,这应该允许您这样做:

object key;
foreach (DictionaryEntry entry in theHashTable)
{
    if (entry.Value == theValue)
    {
        key = entry.Key;
        break;
    }
}

话虽如此,我强烈推荐一种不同的数据结构。如果不出意外,升级到使用 Dictionary<TKey, TValue> 将提供类型安全性,但您仍需要遍历 Dictionary 中的 KeyValuePair<TKey, TValue) 项以查找与值匹配的键。

【讨论】:

  • 更紧凑的版本可能是myHashtable.Where(de => de.Value == theValue).Select(de => de.Key).First()
  • 请注意,可能有几个不同的键都具有相同的值,因此除非您手动确保值是唯一的,否则您将无法确定哪些键对应于特定值。
  • @AvnerShahar-Kashtan 在.Where 之前没有.Cast<DictionaryEntry>() 将会失败
  • @Servy 非常正确。我只是返回第一场比赛。如果需要所有匹配的键,则可以通过将结果存储在集合中轻松地从上面进行调整。
【解决方案2】:

您需要手动循环遍历字典中的KeyValuePair<>s,直到找到匹配的值。

【讨论】:

  • 那将是一个字典,而不是一个哈希表(但 OP 的问题没有意义,所以它也可能是那个)。
  • @蝉:是的;我试图巧妙地暗示 OP 应该使用泛型。
猜你喜欢
  • 2012-11-21
  • 2013-12-03
  • 1970-01-01
  • 2015-03-22
  • 2021-12-30
  • 1970-01-01
  • 2012-07-06
  • 2014-01-30
  • 2013-10-17
相关资源
最近更新 更多