按值獲取字典鍵

如何在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? 對象


#1樓

您能夠這樣作: 索引

  1. 經過遍歷字典中的全部KeyValuePair<TKey, TValue> (若是字典中有不少條目,這將對性能產生很大的影響)
  2. 使用兩個字典,一個用於值到鍵的映射,另外一個用於鍵到值的映射(這將佔用內存的兩倍)。

若是不考慮性能,則使用方法1;若是不考慮內存,則使用方法2。 three

一樣,全部鍵都必須是惟一的,可是值沒必要是惟一的。 您可能有多個具備指定值的鍵。 內存

有什麼緣由不能扭轉鍵值關係? get


#2樓

值不必定必須是惟一的,所以您必須進行查找。 您能夠執行如下操做: string

var myKey = types.FirstOrDefault(x => x.Value == "one").Key;

若是值是惟一的,而且插入頻率比讀取的頻率低,請建立一個反向字典,其中值是鍵,而鍵是值。 it


#3樓

我有很簡單的方法來作到這一點。 對我來講很完美。

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);
}

#4樓

types.Values.ToList().IndexOf("one");

Values.ToList()將您的字典值轉換爲對象列表。 IndexOf(「 one」)搜索新列表以查找「 one」,並返回與字典中鍵/值對的索引匹配的Index。

此方法不關心字典鍵,它僅返回您要查找的值的索引。

請記住,詞典中可能有多個「一個」值。 這就是沒有「獲取密鑰」方法的緣由。


#5樓

如下代碼僅在包含惟一值數據時纔有效

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;
}
相關文章
相關標籤/搜索