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

时间:2012-08-29 12:10:17

标签: c# hashtable

我想得到我的价值的关键,但这在Hashtable中不可能 有数据担架吗?

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

    x.GetKey(20);//equal 2

4 个答案:

答案 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"];