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 ça:
getByValueKey(string value);
getByValueKey("one")
doit être de retour "1"
.
Quelle est la meilleure façon de procéder? Peut-être HashTable, SortedLists?
c#
dictionary
loviji
la source
la source
Réponses:
Les valeurs ne doivent pas nécessairement être uniques, vous devez donc effectuer une recherche. Vous pouvez faire quelque chose comme ça:
Si les valeurs sont uniques et insérées moins fréquemment que lues, créez un dictionnaire inverse où les valeurs sont des clés et les clés sont des valeurs.
la source
KeyValuePair<Tkey,Tvalue>
s'agit d'une structure, donc d'un type de valeur, elle ne peut jamais l'êtrenull
.FirstOrDefault
retournera une instance où tous les champs sont initialisés avec leur valeur par défaut (commenull
pour les chaînes ou 0 pour les entiers). Vous n'aurez donc pas d'exception. Mais vous ne savez pas non plus si vous avez trouvé une valeur, donc cette réponse ne couvre pas le cas où la valeur n'existe pas.Vous pourriez faire ça:
KeyValuePair<TKey, TValue>
du dictionnaire (ce qui représentera une performance considérable si vous avez un certain nombre d'entrées dans le dictionnaire)Utilisez la méthode 1 si les performances ne sont pas une considération, utilisez la méthode 2 si la mémoire n'est pas une considération.
En outre, toutes les clés doivent être uniques, mais les valeurs ne doivent pas nécessairement être uniques. Vous pouvez avoir plusieurs clés avec la valeur spécifiée.
Y a-t-il une raison pour laquelle vous ne pouvez pas inverser la relation valeur-clé?
la source
J'étais dans une situation où la liaison Linq n'était pas disponible et j'ai dû étendre lambda explicitement. Il en est résulté une fonction simple:
Appelez-le comme suit:
Fonctionne sur .NET 2.0 et dans d'autres environnements limités.
la source
peut-être quelque chose comme ça:
la source
J'ai créé une classe à double recherche:
la source
Values.ToList () convertit les valeurs de votre dictionnaire en une liste d'objets. IndexOf ("one") recherche votre nouvelle liste à la recherche de "one" et renvoie l'index qui correspondrait à l'index de la paire clé / valeur dans le dictionnaire.
Cette méthode ne se soucie pas des clés de dictionnaire, elle renvoie simplement l'index de la valeur que vous recherchez.
N'oubliez pas qu'il peut y avoir plus d'une "une" valeur dans votre dictionnaire. Et c'est la raison pour laquelle il n'y a pas de méthode "get key".
la source
Le code ci-dessous ne fonctionne que s'il contient des données de valeur unique
la source
J'ai un moyen très simple de le faire. Cela a fonctionné parfaitement pour moi.
la source