Bonjour,
J'ai deux dictionnaires avec des clés parfois identiques, j'aimerais n'en faire qu'un avec les clés des deux ainsi que la concaténation des valeurs lorsque les clés sont identiques, est ce possible ? Si oui comment ?
Merci
Bonjour,
J'ai deux dictionnaires avec des clés parfois identiques, j'aimerais n'en faire qu'un avec les clés des deux ainsi que la concaténation des valeurs lorsque les clés sont identiques, est ce possible ? Si oui comment ?
Merci
Salut.
Voici l'exemple d'une façon de procéder parmi tant d'autres :
L'output produit :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 IDictionary<int, string> left = new Dictionary<int, string> { { 1, "left_1"}, { 2, "left_2"}, { 3, "left_3"} }; IDictionary<int, string> right = new Dictionary<int, string> { { 2, "right_2"}, { 3, "right_3"}, { 4, "right_4"} }; var fusion = left.Concat(right) .GroupBy(item => item.Key, item => item.Value) .ToDictionary(item => item.Key, item => item.Aggregate(((current, next) => current + "_" + next))); foreach (var item in fusion) { Console.WriteLine("Key {0}: {1}", item.Key, item.Value); }
Le Concat, comme son nom l'indique, concatène les deux dictionnaires. Le GroupBy groupe le tout par clé. Enfin, le ToDictionary recrée un dictionnaire et on utilise un Aggregate pour concaténer les valeurs et n'en garder qu'une seule par cléKey 1: left_1
Key 2: left_2_right_2
Key 3: left_3_right_3
Key 4: right_4
Merci de ta réponse mais n'y a t'il pas un moyen plus simple ?
Ou alors un moyen d'ajouter des valeurs à une certaines clé d'un dictionnaire ?
Si, tu peux toujours le faire à l'ancienne. Avec les mêmes dictionnaires que dans l'exemple précédent, l'output produit est le même :
Là on boucle sur les éléments du dictionnaire right : pour chacun d'eux, si la clé existe dans left alors on ajoute la valeur de right à celle de left, sinon on ajoute l'élément en entier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 foreach (var item in right) { if (left.ContainsKey(item.Key)) { left[item.Key] += "_" + item.Value; } else { left.Add(item); } } foreach (var item in left) { Console.WriteLine("Key {0}: {1}", item.Key, item.Value); }
Merci de ta réponse !
Peut tu m'expliquer le dernier foreach ?
Merci, le soucis est que j'ai oublié de préciser le type de mes dictionnaire ...
Ils sont déclarée comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public IDictionary<string, string[]> left; public IDictionary<string, string[]> right;
Tu as raison
Peux tu me dire ce que fait la ligne suivante :
Je ne comprend pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part left[item.Key] += "_" + item.Value;
si tu ne comprends pas cette ligne :
Je pense qu'il faut que tu te plonges un peu dans un cours C#... et peut-être un tutoriel sur les dictionnaires car, cette ligne est vraimentleft[item.Key] += "_" + item.Value;
basique à comprendre quand on connait un peu C#, la programmation et les dictionnaires...
Mon conseil : prends un bon cours (il y a des cours sur C# ici)...
Je n'ai pas besoin d'un cours, je suis en étude de dev ...
C'est juste que je n'ai encore jamais vu ce cas, ça te parait peut être simple mais ça ne l'es pas pour tout le monde, d'où le préfixe [Débutant] d'ailleurs
Je n'ai pas besoin d'un cours, je suis en étude de dev ...
J'ai 43 ans, je fais du dev depuis l'age de 13 ans, et je prends TOUJOURS la peine de regarder des cours quand un point m'est inconnu ou mal connu.
(et je suis ingénieur en informatique et Expert .Net)...
Le "+=" veut dire que tu vas prendre la valeur de gauche, lui ajouter la valeur de droite et mettre le résultat dans la valeur de gauche
Si tu prenais la peine de lire un cours (on peut anticiper sur ce que le prof va dire... hein, on n'est pas toujours obligé de rester dans l'ignorance tant que le professeur
n'a pas aborder un sujet / ça se fait de prendre de l'avance) tu verrais que
écrire =
Ca sera ma dernière intervention car je crois que sinon, je vais m'énerv.. (ah mince, je commence déjà)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 a += 10; Equivaut à dire : a = a + 10;
Je n'allais pas suivre un cours entier pour juste un "+="
Mais merci de ton aide theMonz
ZenZiTone très utile ton intervention
C'était pour illustrer le fait que ce genre de remarque :
n'est pas forcément compatible avec le développement logiciel. Une simple recherche Google te donnais la réponse en 10 sec chronoJe n'allais pas suivre un cours entier pour juste un "+="
Un cours, tout comme des années d'études ne suffiraient pas à maitriser l'ensemble des rouages d'un langage (enfin je suppose). Il peut cependant être une bonne base pour ne pas buter sur des problèmes mineurs. Donc non, ce n'est pas suivre un cours entier "juste" pour un +=, mais suivre un cours pour avoir les bases nécessaires à la programmation en C#.
En fait, si, et comme tout le monde qui souhaite un minimum apprendre à programmer
Google : Variables C#
Le problème des cours "IRL" de développement, tu peux tomber sur un prof comme j'ai eu du style "je ne vous apprends pas un langage spécifique, mais je vous apprends l'algorithmie : à vous de l'appliquer au langage que vous utilisez".
Donc oui, il faut vraiment prendre l'heure nécessaire pour lire un tutoriel sur Internet ! Mais je pense qu'il y a eu amalgame avec "prends un cours" dans la discussion.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager