如何在C#中按值獲取字典鍵? 性能
Dictionary<string, string> types = new Dictionary<string, string>() { {"1", "one"}, {"2", "two"}, {"3", "three"} };
我想要這樣的東西: spa
getByValueKey(string value);
getByValueKey("one")
必須返回"1"
。 code
最好的方法是什麼? 也許HashTable,SortedLists? 對象
您能夠這樣作: 索引
KeyValuePair<TKey, TValue>
(若是字典中有不少條目,這將對性能產生很大的影響) 若是不考慮性能,則使用方法1;若是不考慮內存,則使用方法2。 three
一樣,全部鍵都必須是惟一的,可是值沒必要是惟一的。 您可能有多個具備指定值的鍵。 內存
有什麼緣由不能扭轉鍵值關係? get
值不必定必須是惟一的,所以您必須進行查找。 您能夠執行如下操做: string
var myKey = types.FirstOrDefault(x => x.Value == "one").Key;
若是值是惟一的,而且插入頻率比讀取的頻率低,請建立一個反向字典,其中值是鍵,而鍵是值。 it
我有很簡單的方法來作到這一點。 對我來講很完美。
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); }
types.Values.ToList().IndexOf("one");
Values.ToList()將您的字典值轉換爲對象列表。 IndexOf(「 one」)搜索新列表以查找「 one」,並返回與字典中鍵/值對的索引匹配的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; }