5

我想获得我的价值的关键,但这在 Hashtable 中
是不可能的 是否有数据拉伸器可以做到这一点?

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

    x.GetKey(20);//equal 2
4

4 回答 4

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.

于 2012-08-29T12:12:29.690 回答
2

您可以使用 Linq 运算符

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

您可以使用 foreach 进行迭代

于 2012-08-29T12:13:12.437 回答
2

如果您正在寻找 O(1) 解决方案,那么您可能还需要实现反转Hashtable,其中该表的值将是键并且键成为相应的值。

于 2012-08-29T12:13:41.203 回答
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"];
于 2012-08-29T12:18:36.833 回答