Wie erhalte ich einen Dictionary-Schlüssel nach Wert in C#?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Ich möchte etwas wie dieses:
getByValueKey(string value);
getByValueKey("one")
muss "1"
zurückgeben.
Was ist der beste Weg, dies zu tun? Vielleicht HashTable, SortedLists?
Die Werte müssen nicht unbedingt eindeutig sein, so dass Sie einen Lookup durchführen müssen. Sie können etwas wie dies tun:
var myKey = types.FirstOrDefault(x => x.Value == "one").Key;
Wenn die Werte eindeutig sind und seltener eingefügt als gelesen werden, erstellen Sie ein inverses Wörterbuch, in dem Werte die Schlüssel und Schlüssel die Werte sind.
Das könnten Sie tun:
KeyValuePair<TKey, TValue>
's im Wörterbuch ziehen (was bei einer großen Anzahl von Einträgen im Wörterbuch einen erheblichen Leistungseinbruch bedeutet)Verwenden Sie Methode 1, wenn die Leistung keine Rolle spielt, verwenden Sie Methode 2, wenn der Speicherplatz keine Rolle spielt.
Außerdem müssen alle Schlüssel eindeutig sein, aber die Werte müssen nicht eindeutig sein. Sie können mehr als einen Schlüssel mit dem angegebenen Wert haben.
Gibt es einen Grund, warum Sie die Schlüssel-Wert-Beziehung nicht umkehren können?
Ich habe eine sehr einfache Möglichkeit, dies zu tun. Es funktionierte perfekt für mich.
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);
}