c# dictionnaires se croisent
J'ai une question à propos de Linq /Lambda et le problème suivant:
J'ai deux dictionnaires, le primaire et le secondaire... Ces deux dictionnaires sont définis comme Clé=chaîne de caractères, Valeur=int. J'ai besoin de couper vers le bas le dictionnaire primaire si les TOUCHES croisent secondaire dictionnaire.
c'est à dire:
primaryDict = ["thing1", 33] ["thing2", 24] ["thing3", 21] ["thing4", 17] ["thing5", 12]
secondaryDict = ["thing1", 22] ["thing3", 20] ["thing4", 19] ["thing7", 17] ["thing9", 10]
resultDict = ["thing1", 33] ["thing3", 21] ["thing4", 17]
Ma tentative:
resultDict = primaryDict.Keys.Intersect(secondaryDict.Keys).ToDictionary(t => t.Key, t.Value);
De toute évidence, cela ne fonctionne pas car la primaryDict.Les touches.Se croisent, c'est de revenir une liste de clés... comment pourrais-je retrouver un nouveau dictionnaire, ou la paire de bas le dictionnaire primaire? Toute aide serait appréciée.
OriginalL'auteur Stewart Basterash | 2012-05-21
Vous devez vous connecter pour publier un commentaire.
Vous pourriez le faire de cette façon:
ou bien:
le dernier est peut-être un peu plus efficace, car permet d'éviter la création d'une poubelle de collecte (celui généré par la méthode Intersect) et n'a pas besoin d'un deuxième accès par clé
primaryDict
.MODIFIER (par commentaire) :
Qui fonctionnait très bien pour ce que je fais... j'ai utilisé la deuxième solution et que tout fonctionne comme prévu. Vous rock Dave!
Comme un suivi... est-il possible de faire la somme des valeurs de cette même expression?
Les valeurs dans primaryDict avec ceux qui sont dans secondaryDict ayant les mêmes touches?
Oui... je suis de la capture et de l'analyse des données dans différents domaines. Les différents dictionnaires de conserver les données pour un domaine donné... La clé indique un élément à l'intérieur de ce domaine, et la valeur est la façon dont elle a été présentée dans ce domaine... j'essaie de faire un peu plus de calcul... j'ai besoin de faire une analyse statistique sur un élément donné (clé), dans plusieurs domaines (dictionnaire), sur la base de valeurs pour chaque touche... j'espère que cela a du sens?
OriginalL'auteur digEmAll
Vous pouvez toujours utiliser
primaryDict
au sein de votre Linq énoncé, puisque vous êtes la création d'un nouveau dictionnaire, qui n'est affectée à la variable une fois qu'il est créé:OriginalL'auteur BrokenGlass
Non testé:
OriginalL'auteur Steve Czetty