¿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, SortedLists?
c#
dictionary
loviji
fuente
fuente
Respuestas:
Los valores no necesariamente tienen que ser únicos, por lo que debe realizar una búsqueda. Puedes hacer algo como esto:
Si los valores son únicos y se insertan con menos frecuencia que la lectura, cree un diccionario inverso donde los valores son claves y las claves son valores.
fuente
KeyValuePair<Tkey,Tvalue>
es una estructura, por lo que es un tipo de valor, nunca puede serlonull
.FirstOrDefault
devolverá una instancia donde todos los campos se inicializan con su valor predeterminado (comonull
para cadenas o 0 para entradas). Entonces no obtendrás una excepción. Pero tampoco sabe si ha encontrado un valor, por lo que esta respuesta no cubre el caso de que el valor no exista.Podrías hacer eso:
KeyValuePair<TKey, TValue>
's en el diccionario (que será un éxito considerable si tiene varias entradas en el diccionario)Use el Método 1 si el rendimiento no es una consideración, use 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 puedas revertir la relación clave-valor?
fuente
Estaba en una situación en la que el enlace Linq no estaba disponible y tuve que expandir lambda explícitamente. Resultó en una función simple:
Llámalo como sigue:
Funciona en .NET 2.0 y en otros entornos limitados.
fuente
tal vez algo como esto:
fuente
He creado una clase de doble búsqueda:
fuente
Values.ToList () convierte los valores de tu diccionario en una Lista de objetos. IndexOf ("uno") busca en su nueva Lista buscando "uno" y devuelve el Índice que coincidiría con el índice del par Clave / Valor en el diccionario.
Este método no se preocupa por las claves del diccionario, simplemente devuelve el índice del valor que está buscando.
Tenga en cuenta que puede haber más de un valor "uno" en su diccionario. Y esa es la razón por la que no existe un método de "obtención de clave".
fuente
El siguiente código solo funciona si contiene datos de valor único
fuente
Tengo una manera muy simple de hacer esto. Funcionó perfecto para mí.
fuente