získať kľúč slovníka podľa hodnoty

Ako získam kľúč slovníka podľa hodnoty v jazyku C#?

Dictionary<string, string> types = new Dictionary<string, string>()
{
            {"1", "one"},
            {"2", "two"},
            {"3", "three"}
};

Chcem niečo také:

getByValueKey(string value);

getByValueKey("one") musí vrátiť "1".

Aký je najlepší spôsob, ako to urobiť? Možno HashTable, SortedLists?

Riešenie

Hodnoty nemusia byť nevyhnutne jedinečné, takže musíte vykonať vyhľadávanie. Môžete to urobiť takto:

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

Ak sú hodnoty jedinečné a vkladajú sa menej často ako čítajú, potom vytvorte inverzný slovník, kde hodnoty sú kľúče a kľúče sú hodnoty.

Komentáre (13)

Mohli by ste to urobiť:

  1. prechádzaním všetkých KeyValuePair's v slovníku (čo bude znamenať značný výkonnostný zásah, ak máte v slovníku množstvo položiek)
  2. Použiť dva slovníky, jeden na mapovanie hodnoty na kľúč a druhý na mapovanie hodnoty na kľúč (čo by zabralo dvakrát viac miesta v pamäti).

Ak nezáleží na výkone, použite metódu 1, ak nezáleží na pamäti, použite metódu 2.

Takisto všetky kľúče musia byť jedinečné, ale hodnoty nemusia byť jedinečné. Môžete mať viac ako jeden kľúč so zadanou hodnotou.

Existuje nejaký dôvod, prečo nemôžete obrátiť vzťah kľúč-hodnota?

Komentáre (2)

Mám na to veľmi jednoduchý spôsob. Mne sa osvedčil dokonale.

Dictionary types = new Dictionary();

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);
}
Komentáre (3)