Comment obtenir une clé de dictionnaire par valeur en C# ?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Je veux quelque chose comme ceci :
getByValueKey(string value);
getByValueKey("one" ;)
doit retourner "1"
.
Quelle est la meilleure façon de faire cela ? Peut-être HashTable, SortedLists ?
Les valeurs ne doivent pas nécessairement être uniques, vous devez donc effectuer une recherche. Vous pouvez faire quelque chose comme ceci :
var myKey = types.FirstOrDefault(x => x.Value == "one").Key;
Si les valeurs sont uniques et sont insérées moins fréquemment que les lectures, alors créez un dictionnaire inverse où les valeurs sont des clés et les clés des valeurs.
Tu pourrais le faire :
KeyValuePair<TKey, TValue>
's du dictionnaire (ce qui représente une perte de performance non négligeable si vous avez un certain nombre d'entrées dans le dictionnaire).Utilisez la méthode 1 si les performances ne sont pas un problème, utilisez la méthode 2 si la mémoire n'est pas un problème.
En outre, toutes les clés doivent être uniques, mais il n'est pas nécessaire que les valeurs soient uniques. Vous pouvez avoir plus d'une clé avec la valeur spécifiée.
Y a-t-il une raison pour laquelle vous ne pouvez pas inverser la relation clé-valeur ?
J'ai un moyen très simple de le faire. Cela a parfaitement fonctionné pour moi.
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);
}