Добавление словаря в другой
Возможные дубликаты:
Слияние словарей на С#
Какой самый быстрый способ скопировать значения и ключи из одного словаря в другой в С#?
У меня есть словарь, который имеет в нем несколько значений, например:
Animals <string, string>
Теперь я получаю другой похожий словарь, скажем:
NewAnimals <string,string>
Как я могу добавить весь словарь NewAnimals к Animals?
Ответы
Ответ 1
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);
}
(выбрасывает дубликаты клавиш для словарей)
Ответ 2
Создайте метод расширения, скорее всего, вы захотите использовать это более одного раза, и это предотвратит дублирование кода.
Реализация:
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);
Ответ 3
Самый очевидный способ:
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>
.
Ответ 4
Короткий ответ: вам нужно зациклиться.
Дополнительная информация по этой теме:
Каков самый быстрый способ скопировать значения и ключи из одного словаря в другой в С#?
Ответ 5
Вы можете прокрутить все Животные, используя foreach, и поместить их в NewAnimals.