我想得到我的价值的关键,但这在Hashtable中不可能 有数据担架吗?
Hashtable x = new Hashtable();
x.Add("1", "10");
x.Add("2", "20");
x.Add("3", "30");
x.GetKey(20);//equal 2
答案 0 :(得分:9)
如果你的所有钥匙都是字符串。
var key = x.Keys.OfType<String>().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");
如果您知道自己的价值只有一个不同的密钥,请使用Single
代替FirstOrDefault
。
答案 1 :(得分:2)
您可以使用Linq运算符
x.Keys.OfType<String>().FirstOrDefault(a => x[a] == "20")
您可以使用foreach进行迭代
答案 2 :(得分:2)
如果您正在寻找O(1)解决方案,那么您可能还需要实现反向Hashtable
,此表的值将为key,key将成为相应的值。
答案 3 :(得分:1)
我强烈建议使用两个Dictionary<string, string>
,但这意味着它们之间的关系为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"];