C# 在哈希表c中按值获取键#

C# 在哈希表c中按值获取键#,c#,hashtable,C#,Hashtable,我想获取我的值的键,但在哈希表中这是不可能的 是否有数据拉伸器来执行此操作 Hashtable x = new Hashtable(); x.Add("1", "10"); x.Add("2", "20"); x.Add("3", "30"); x.GetKey(20);//equal 2 如果所有键都是字符串 var key = x.Keys.OfType<String>().FirstOrDefault(s => x[s] ==

我想获取我的值的键,但在哈希表中这是不可能的
是否有数据拉伸器来执行此操作

    Hashtable x = new Hashtable();
    x.Add("1", "10");
    x.Add("2", "20");
    x.Add("3", "30");

    x.GetKey(20);//equal 2

如果所有键都是字符串

var key = x.Keys.OfType<String>().FirstOrDefault(s => x[s] == "20")
var key=x.Keys.OfType().FirstOrDefault(s=>x[s]==“20”)
或者最好改用字典:

Dictionary<string, string> x = new Dictionary<string, string>();
x.Add("1", "10");
x.Add("2", "20");
x.Add("3", "30");

string result = x.Keys.FirstOrDefault(s => x[s] == "20");
Dictionary x=newdictionary();
x、 添加(“1”、“10”);
x、 添加(“2”、“20”);
x、 添加(“3”、“30”);
字符串结果=x.Keys.FirstOrDefault(s=>x[s]==“20”);

如果您知道您的值始终只有一个不同的键,请使用而不是。

您可以使用Linq运算符

x.Keys.OfType<String>().FirstOrDefault(a => x[a] == "20")
x.Keys.OfType().FirstOrDefault(a=>x[a]==“20”)

如果要寻找O(1)解决方案,可以使用foreach进行迭代,然后,您可能需要实现反向的
哈希表
,其中该表的值将是key,key将成为相应的值。

我强烈建议使用两个
字典
,但这意味着它们之间是1-1关系:

var dict1 = new Dictionary<string, string>();
var dict2 = new Dictionary<string, string>();

dict1.Add("1", "10");
dict2.Add("10", "1");

dict1.Add("2", "20");
dict2.Add("20", "2");

dict1.Add("3", "30");
dict2.Add("30", "3");

var valueOfDictOne = dict1["1"];
var valueOfDictTwo = dict2["10"];
var dict1=新字典();
var dict2=新字典();
第1条加入(“1”、“10”);
第2条加入(“10”、“1”);
第1条加入(“2”、“20”);
第2条加入(“20”、“2”);
第1条加入(“3”、“30”);
第2条加入(“30”、“3”);
DICTONE的var值=dict1[“1”];
DictTwo的var值=dict2[“10”];

你可以用字典来做这件事。请参阅此处的更多信息:这完全违背了
哈希表的目的。你为什么要那样做?顺便说一句:从.NET2.0开始,你应该改用
字典
。谢谢,字典更好