Добавление словаря в другой [дубликат]




Возможные Дубликаты:
объединение словарей в C#
каков самый быстрый способ скопировать значения и ключи из одного словаря в другой в C#?






у меня есть словарь, который имеет некоторые значения в нем, скажем:



Animals <string, string>


Теперь я получаю другой подобный словарь, скажем:



NewAnimals <string,string>


как я могу добавить весь словарь NewAnimals к животным?

627   5  
c#

5 ответов:

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

Примечание: это вызывает исключение на дубликат ключа.


или если вы действительно хотите пойти по маршруту метода расширения (я бы не стал), то вы можете определить общее AddRange метод расширения, который работает на любом ICollection<T>, а не Dictionary<TKey,TValue>.

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

(бросает на дубликаты ключей для словарей)

создать Метод Расширения скорее всего, вы захотите использовать это несколько раз, и это предотвращает дублирование кода.

реализация:

 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
            }  
        } 
 }

использование:

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

animals.AddRange(newanimals);

самый очевидный способ-это:

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

С Dictionary<TKey, TValue>явно реализуетICollection<KeyValuePair<TKey, TValue>>.Addспособ, вы также можете сделать это:

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

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

жаль, что у класса нетAddRangeметодомList<T> делает.

короткий ответ, вы должны петли.

дополнительная информация по этой теме:

каков самый быстрый способ скопировать значения и ключи из одного словаря в другой в C#?

вы можете перебирать всех животных с помощью foreach и помещать его в NewAnimals.

Comments

    Ничего не найдено.