få ordboknøkkel etter verdi

Hvordan får jeg en ordboknøkkel etter verdi i C#?

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

Jeg vil ha noe som dette:

getByValueKey(string value);

getByValueKey("one") må returnere "1".

Hva er den beste måten å gjøre dette på? Kanskje HashTable, SortedLists?

Løsning

Verdiene trenger ikke nødvendigvis å være unike, så du må gjøre et oppslag. Du kan gjøre noe sånt som dette:

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

Hvis verdiene er unike og settes inn sjeldnere enn de leses, oppretter du en omvendt ordbok der verdier er nøkler og nøkler er verdier.

Kommentarer (13)

Det kan du gjøre:

  1. Ved å løkke gjennom alle KeyValuePair's i ordboken (som vil være en betydelig ytelse hit hvis du har en rekke oppføringer i ordboken)
  2. Bruk to ordbøker, en for verdi-til-nøkkel-tilordning og en for nøkkel-til-verdi-tilordning (som vil ta dobbelt så mye plass i minnet).

Bruk metode 1 hvis ytelse ikke er et hensyn, bruk metode 2 hvis minne ikke er et hensyn.

Alle nøkler må også være unike, men verdiene trenger ikke å være unike. Du kan ha mer enn én nøkkel med den angitte verdien.

Er det noen grunn til at du ikke kan reversere forholdet mellom nøkkel og verdi?

Kommentarer (2)

Jeg har en veldig enkel måte å gjøre dette på. Det fungerte perfekt for meg.

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);
}
Kommentarer (3)