trabajar programar obtener listas leer imprimir diccionario consultar con como colecciones acceder c#

programar - obtener key de un diccionario c#



Agregar un diccionario a otro (5)

Cree un método de extensión. Lo más probable es que desee usar esto más de una vez y esto evita el código duplicado.

Implementación:

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

Uso:

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

Posibles duplicados:
Fusionando diccionarios en C #
¿Cuál es la forma más rápida de copiar los valores y las claves de un diccionario a otro en C #?

Tengo un diccionario que tiene algunos valores, digamos:

Animals <string, string>

Ahora recibo otro diccionario similar, por ejemplo:

NewAnimals <string,string>

¿Cómo puedo agregar todo el diccionario NewAnimals a Animals?


La forma más obvia es:

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

Dado que Dictionary<TKey, TValue> implementa explícitamente ICollection<KeyValuePair<TKey, TValue>>.Add method, también puede hacer esto:

var animalsAsCollection = (ICollection<KeyValuePair<string, string>>) Animals; foreach(var kvp in NewAnimals) animalsAsCollection.Add(kvp);

Es una pena que la clase no tenga un método AddRange como List<T> .



Puede recorrer todos los animales utilizando foreach y ponerlo en NewAnimals.


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

Nota: esto arroja una excepción en una clave duplicada.

O si realmente desea ir a la ruta del método de extensión (no lo haría), entonces podría definir un método general de extensión AddRange que funcione en cualquier ICollection<T> , y no solo en 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); }

(arroja llaves duplicadas para los diccionarios)