¿Cómo obtengo una clave de diccionario por valor en C#?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Quiero algo como esto
getByValueKey(string value);
getByValueKey("uno")
debe devolver `"1".
¿Cuál es la mejor manera de hacer esto? ¿Tal vez HashTable, SortedLists?
Los valores no tienen que ser necesariamente únicos, por lo que hay que hacer una búsqueda. Puedes hacer algo así:
var myKey = types.FirstOrDefault(x => x.Value == "one").Key;
Si los valores son únicos y se insertan con menos frecuencia que se leen, entonces crea un diccionario inverso donde los valores son claves y las claves son valores.
Podrías hacerlo:
KeyValuePair<TKey, TValue<
's del diccionario (lo que supondrá un considerable impacto en el rendimiento si tiene varias entradas en el diccionario)Utilice el método 1 si el rendimiento no es una consideración, utilice el método 2 si la memoria no es una consideración.
Además, todas las claves deben ser únicas, pero no es necesario que los valores sean únicos. Puede tener más de una clave con el valor especificado.
¿Hay alguna razón por la que no pueda invertir la relación clave-valor?
Tengo una forma muy sencilla de hacerlo. Me ha funcionado perfectamente.
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);
}