Come ottengo la chiave di un dizionario per valore in C#?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Voglio qualcosa come questo:
getByValueKey(string value);
getByValueKey("one")
deve restituire "1"
.
Qual è il modo migliore per farlo? Forse HashTable, SortedLists?
I valori non devono necessariamente essere unici, quindi dovete fare una ricerca. Potete fare qualcosa del genere:
var myKey = types.FirstOrDefault(x => x.Value == "one").Key;
Se i valori sono unici e vengono inseriti meno frequentemente che letti, allora create un dizionario inverso dove i valori sono le chiavi e le chiavi sono i valori.
Potresti farlo:
KeyValuePair<TKey, TValue>
's nel dizionario (che sarà un notevole calo di prestazioni se avete un certo numero di voci nel dizionario)Usate il metodo 1 se le prestazioni non sono una considerazione, usate il metodo 2 se la memoria non è una considerazione.
Inoltre, tutte le chiavi devono essere uniche, ma i valori non devono essere unici. Potete avere più di una chiave con il valore specificato.
C'è qualche motivo per cui non si può invertire la relazione chiave-valore?
Ho un modo molto semplice per farlo. Ha funzionato perfettamente per me.
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);
}