根据价值获得字典关键字
可能重复:
获得一个通用字典的价值的关键?
如何通过C#中的值获取字典键?
Dictionary<string, string> types = new Dictionary<string, string>() { {"1", "one"}, {"2", "two"}, {"3", "three"} };
我想要这样的东西:
getByValueKey(string value);
getByValueKey("one")
必须返回"1"
。
这样做的最好方法是什么? 也许HashTable,SortedLists?
值不一定必须是唯一的,所以你必须做一个查询。 你可以做这样的事情:
var myKey = types.FirstOrDefault(x => x.Value == "one").Key;
如果值是唯一的,插入次数比读取次数less,则创build一个反向字典,其中值是键,键是值。
你可以这样做:
- 通过循环遍历字典中的所有
KeyValuePair<TKey, TValue>
(如果字典中有多个条目,这将是一个相当大的性能问题) - 使用两个词典,一个用于值到键的映射,另一个用于键值映射(这将占用内存空间的两倍)。
如果不考虑性能,请使用方法1,如果不考虑内存,请使用方法2。
而且,所有的密钥必须是唯一的,但是这些值不必是唯一的。 您可能有多个具有指定值的键。
有没有什么理由不能扭转关键价值关系?
如果一个以上的密钥存在价值呢?
哪个键应该返回?
为了避免做出假设,Microsoft没有包含GetKey
方法。
也许是这样的:
foreach (var keyvaluepair in dict) { if(Object.ReferenceEquals(keyvaluepair.Value, searchedObject)) { //dict.Remove(keyvaluepair.Key); break; } }
types.Values.ToList().IndexOf("one");
Values.ToList()将您的字典值转换为对象列表。 IndexOf(“one”)会search新的List,查找“one”,并返回与字典中的Key / Value对的索引匹配的Index。
此方法不关心字典键,它只是返回您正在查找的值的索引。
请记住,字典中可能有多个“一个”值。 这就是没有“得到钥匙”的原因。
以下代码仅适用于包含唯一值数据的情况
public string getKey(string Value) { if (dictionary.ContainsValue(Value)) { var ListValueData=new List<string>(); var ListKeyData = new List<string>(); var Values = dictionary.Values; var Keys = dictionary.Keys; foreach (var item in Values) { ListValueData.Add(item); } var ValueIndex = ListValueData.IndexOf(Value); foreach (var item in Keys) { ListKeyData.Add(item); } return ListKeyData[ValueIndex]; } return string.Empty; }
我有非常简单的方法来做到这一点。 这对我来说是完美的。
Dictionary<string, string> types = new Dictionary<string, string>(); types.Add("1", "one"); types.Add("2", "two"); types.Add("3", "three"); Console.WriteLine("Please type a key to show its value: "); string rLine = Console.ReadLine(); if(types.ContainsKey(rLine)) { string value_For_Key = types[rLine]; Console.WriteLine("Value for " + rLine + " is" + value_For_Key); }