Obtener clave de diccionario por valor

Resuelto loviji asked hace 14 años • 11 respuestas

¿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?

loviji avatar Mar 15 '10 05:03 loviji
Aceptado

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.

Kimi avatar Mar 14 '2010 22:03 Kimi

Podrías hacer eso:

  1. Recorriendo todas las KeyValuePair<TKey, TValue>entradas del diccionario (lo que afectará considerablemente el rendimiento si tiene varias entradas en el diccionario)
  2. 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.

Zach Johnson avatar Mar 14 '2010 22:03 Zach Johnson