Obtener clave de diccionario por valor
¿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("one")
debe ser devuelto "1"
.
¿Cuál es la mejor manera de hacer esto? ¿Quizás HashTable o SortedLists?
Los valores no necesariamente tienen que ser únicos, por lo que debe realizar una búsqueda. Puedes hacer algo como esto:
var myKey = types.FirstOrDefault(x => x.Value == "one").Key;
Si los valores son únicos y se insertan con menos frecuencia que la lectura, cree un diccionario inverso donde los valores sean claves y las claves sean valores.
Podrías hacer eso:
- Recorriendo todas las
KeyValuePair<TKey, TValue>
entradas del diccionario (lo que afectará considerablemente el rendimiento si tiene varias entradas en el diccionario) - Utilice dos diccionarios, uno para el mapeo de valor a clave y otro para el mapeo de clave a valor (lo que ocuparía el doble de espacio en la memoria).
Utilice el Método 1 si el rendimiento no es una consideración y 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. Es posible que tenga más de una clave con el valor especificado.