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 ?
Partager