Récupérer key dans un Dictionary pour une certaine value [Résolu]

Messages postés
19
Date d'inscription
samedi 9 juin 2007
Dernière intervention
29 novembre 2009
- - Dernière réponse : rhonin33
Messages postés
10
Date d'inscription
jeudi 18 octobre 2007
Dernière intervention
22 juillet 2011
- 22 juil. 2011 à 15:08
Bonjour,


Je souhaiterais savoir comment je peux récupérer la key associé à une certaine valeur de mon Dictionary.

Merci d'avance
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
5
Merci
Dans ce cas si la priorité est la vitesse de récupération d'un élément qu'il soit cherché par clé ou valeur, crée une classe dédiée à cette tâche (exposant par exemple une méthode d'ajout d'élément, une de recherche de joueur par position et une de recherche de position par joueur) et commence par une implémentation interne reposant sur 2 Dictionary.
Ca aura bien sûr un cout supplémentaire à l'insertion et en consommation mémoire.

L'avantage de masquer cette utilisation de 2 Dictionary est que cette implémentation pourra ainsi être changée plus tard de façon transparente pour le code consommateur, si une idée plus intéressante voit le jour.


/*
coq
MVP Visual C#
CoqBlog
*/

Merci cs_coq 5

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_coq
Messages postés
10
Date d'inscription
jeudi 18 octobre 2007
Dernière intervention
22 juillet 2011
5
Merci
Deux ans après le linq marche du feu de Dieu :

string macle DictBDD.Single(m> m.Value == "ValeurRecherché").Key;

Merci rhonin33 5

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de rhonin33
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
Bonjour,

Dans ce cas la valeur est elle aussi une clé.
Si ce type de recherche est effectué souvent, il serait peut être intéressant de réfléchir à une structure de donnée gérant cela afin d'obtenir de bonne performances (pour schématiser c'est un peu comme avoir 2 dictionary).

Dans le cas contraire, quitte a être sur une recherche linéaire autant passer par une itération directe sur les éléments KeyValuePair du Dictionary.
Ca donnerait un code de ce type :
foreach(KeyValuePair<TKey, TValue> currentPair in myDictionary)
{
if(currentPair.Value searchedValue) // changer la méthode de comparaison si insuffisant
{
TKey foundKey = currentPair.Key;
...
}
}


/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
Le même bout de code avec le tag qui va bien :

foreach(KeyValuePair<TKey, TValue> currentPair in myDictionary)
{
  if(currentPair.Value searchedValue) // changer la méthode de comparaison si insuffisant
  {
    TKey foundKey = currentPair.Key;
    ...
  }
}



/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Messages postés
19
Date d'inscription
samedi 9 juin 2007
Dernière intervention
29 novembre 2009
0
Merci
Merci pour ta solution, je savais que je pouvais faire comme ça, par contre, je n'ai pas bien compris la solution avec 2 Dictionary car je voudrais justement éviter la 2ème solution...

Je reprécise ma problématique avec cet exemple:

Dictionary PositionJoueurs = new Dictionary();
PositionJoueurs.Add(5, 'Nom joueur 1');
PositionJoueurs.Add(8, 'Nom joueur 2');
PositionJoueurs.Add(3, 'Nom joueur 3');
PositionJoueurs.Add(1, 'Nom joueur 4');
PositionJoueurs.Add(5, 'Nom joueur 5');

Quel type de structure est optimale pour récupérer la position du joueur 4 par exemple ?
Je pense que le Dictionary n'est pas la bonne solution dans mon cas.

Merci d'avance
Commenter la réponse de urban45
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
Heu, quel est le besoin global au juste ?
La recherche de joueur par position est elle utilisée ?

Si le seul but de la structure est de trouver rapidement la position d'un joueur identifié par son nom et jamais/rarement l'inverse alors le Dictionary peut être une bonne solution, c'est juste que les rôles clé/valeur doivent être inversés :

Dictionary<string, int> PositionJoueurs = new Dictionary<string, int>(); 
PositionJoueurs.Add("Nom joueur 1", 5); 
PositionJoueurs.Add("Nom joueur 2", 8); 
PositionJoueurs.Add("Nom joueur 3", 3); 
PositionJoueurs.Add("Nom joueur 4", 1); 
PositionJoueurs.Add("Nom joueur 5", 5); 




/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Messages postés
19
Date d'inscription
samedi 9 juin 2007
Dernière intervention
29 novembre 2009
0
Merci
Non j'ai besoin que la Key reste la position car j'utilise cette clé pour tirer au hasard des joueurs dans le Dictionary.

Donc je ne sais pas trop comment faire...
Commenter la réponse de urban45
Messages postés
19
Date d'inscription
samedi 9 juin 2007
Dernière intervention
29 novembre 2009
0
Merci
Ok j'ai toutes les infos qu'il me fallait, merci !!
Commenter la réponse de urban45
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
0
Merci
De rien :-)

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.