我想获得我的价值的关键,但这在 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] == "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
.
您可以使用 Linq 运算符
x.Keys.OfType<String>().FirstOrDefault(a => x[a] == "20")
您可以使用 foreach 进行迭代
如果您正在寻找 O(1) 解决方案,那么您可能还需要实现反转Hashtable
,其中该表的值将是键并且键成为相应的值。
我强烈建议使用两个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"];