76 votes

Ajout d'un dictionnaire à un autre

Duplicatas possibles :
Fusionner des dictionnaires en C#
Quel est le moyen le plus rapide de copier les valeurs et les clés d'un dictionnaire dans un autre en C# ?

J'ai un dictionnaire qui contient des valeurs, par exemple :

Animals <string, string>

Je reçois maintenant un autre dictionnaire similaire, disons :

NewAnimals <string,string>

Comment puis-je ajouter l'intégralité du dictionnaire NewAnimals à Animals ?

97voto

CodesInChaos Points 60274
foreach(var newAnimal in NewAnimals)
    Animals.Add(newAnimal.Key,newAnimal.Value)

Remarque : une exception est levée si la clé est dupliquée.


Ou si vous voulez vraiment emprunter la voie de la méthode d'extension (ce que je ne ferais pas), vous pourriez définir une méthode d'extension générale. AddRange méthode d'extension qui fonctionne sur tout ICollection<T> et pas seulement sur Dictionary<TKey,TValue> .

public static void AddRange<T>(this ICollection<T> target, IEnumerable<T> source)
{
    if(target==null)
      throw new ArgumentNullException("target");
    if(source==null)
      throw new ArgumentNullException("source");
    foreach(var element in source)
        target.Add(element);
}

(lance sur les clés dupliquées pour les dictionnaires)

33voto

Gabe Points 24378

Créer un Méthode d'extension Il est fort probable que vous souhaitiez l'utiliser plus d'une fois, ce qui permet d'éviter la duplication du code.

Mise en œuvre :

 public static void AddRange<T, S>(this Dictionary<T, S> source, Dictionary<T, S> collection)
 {
        if (collection == null)
        {
            throw new ArgumentNullException("Collection is null");
        }

        foreach (var item in collection)
        {
            if(!source.ContainsKey(item.Key)){ 
               source.Add(item.Key, item.Value);
            }
            else
            {
               // handle duplicate key issue here
            }  
        } 
 }

Utilisation :

Dictionary<string,string> animals = new Dictionary<string,string>();
Dictionary<string,string> newanimals = new Dictionary<string,string>();

animals.AddRange(newanimals);

9voto

Ani Points 59747

Le moyen le plus évident est :

foreach(var kvp in NewAnimals)
   Animals.Add(kvp.Key, kvp.Value); 
  //use Animals[kvp.Key] = kvp.Value instead if duplicate keys are an issue

Depuis Dictionary<TKey, TValue> met explicitement en œuvre le ICollection<KeyValuePair<TKey, TValue>>.Add vous pouvez également procéder ainsi :

var animalsAsCollection = (ICollection<KeyValuePair<string, string>>) Animals;

foreach(var kvp in NewAnimals)
   animalsAsCollection.Add(kvp);

C'est dommage que la classe n'ait pas un AddRange méthode comme List<T> fait.

3voto

automagic Points 707

La réponse courte est que vous devez faire une boucle.

Plus d'informations sur ce sujet :

http://stackoverflow.com/questions/81552/whats-the-fastest-way-to-copy-the-values-and-keys-from-one-dictionary-into-anoth

0voto

abhishek Points 1746

Vous pouvez parcourir en boucle tous les animaux en utilisant foreach et les placer dans NewAnimals.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X