valor significado reservadas palabras obtener modificar metodos iterar funciones ejemplos diccionario consola c# dictionary copy foreach

significado - obtener valor de un diccionario c#



¿Cuál es la forma más rápida de copiar los valores y las claves de un diccionario a otro en C#? (6)

No entiendo, ¿por qué no usar el Diccionario (Diccionario) (como lo sugiere ageektrapped)?

¿Desea realizar una copia superficial o una copia profunda? (es decir, ¿ambos diccionarios apuntan a las mismas referencias o nuevas copias de cada objeto dentro del nuevo diccionario?)

Si desea crear un nuevo diccionario que apunte a objetos nuevos , creo que la única forma es a través de un foreach .

No parece haber un método dictionary.AddRange (). ¿Alguien sabe una mejor manera de copiar los elementos a otro diccionario sin usar un bucle foreach?

Estoy usando System.Collections.Generic.Dictionary. Esto es para .NET 2.0.


No hay nada malo con un bucle for / foreach. Eso es todo lo que un método hipotético de AddRange haría de todos modos.

La única preocupación extra que tendré es con el comportamiento de asignación de memoria, porque agregar una gran cantidad de entradas podría causar múltiples reasignaciones y nuevos hash. No hay forma de aumentar la capacidad de un diccionario existente en una cantidad determinada. Sería mejor que asignaras un nuevo diccionario con suficiente capacidad para los dos actuales, pero aún necesitarías un bucle para cargar al menos uno de ellos.



Por diversión, creé este método de extensión para diccionario. Esto debería hacer una copia profunda siempre que sea posible.

public static Dictionary<TKey, TValue> DeepCopy<TKey,TValue>(this Dictionary&lt;TKey, TValue> dictionary) { Dictionary<TKey, TValue> d2 = new Dictionary<TKey, TValue>(); bool keyIsCloneable = default(TKey) is ICloneable; bool valueIsCloneable = default(TValue) is ICloneable; foreach (KeyValuePair<TKey, TValue> kvp in dictionary) { TKey key = default(TKey); TValue value = default(TValue); if (keyIsCloneable) { key = (TKey)((ICloneable)(kvp.Key)).Clone(); } else { key = kvp.Key; } if (valueIsCloneable) { value = (TValue)((ICloneable)(kvp.Value)).Clone(); } else { value = kvp.Value; } d2.Add(key, value); } return d2; }


Está el constructor del Dictionary que toma otro Dictionary .

Tendrás que convertirlo en IDictionary , pero hay una sobrecarga Add() que toma KeyValuePair<TKey, TValue> . Sin embargo, todavía estás usando foreach.


var Animal = new Dictionary < string, string > () ;

uno puede pasar el diccionario de animales existente al constructor.

Dictionary< string, string > NewAnimals = new Dictionary< string, string >(Animal);