Tengo dos diccionarios de tipo <string,object>
en C#. ¿Cómo puedo copiar todo el contenido de un objeto de diccionario al otro sin aplicar un bucle?¿Cómo combinar dos diccionarios sin bucle?
Respuesta
var result = dictionaries.SelectMany(dict => dict)
.ToDictionary(pair => pair.Key, pair => pair.Value);
Puede utilizar Concat
:
Dictionary<string, object> d1 = new Dictionary<string, object>();
d1.Add("a", new object());
d1.Add("b", new object());
Dictionary<string, object> d2 = new Dictionary<string, object>();
d2.Add("c", new object());
d2.Add("d", new object());
Dictionary<string, object> d3 = d1.Concat(d2).ToDictionary(e => e.Key, e => e.Value);
foreach (var item in d3)
{
Console.WriteLine(item.Key);
}
Esto devolverá un IEnumerable
Eso es verdad. Gracias por señalar eso. Editaré –
En primer lugar, no es posible sin bucle. Si ese bucle se realiza en un método (extensión) es irrelevante, aún requiere un bucle.
De hecho, voy a recomendar hacerlo manualmente. Todas las otras respuestas dadas requieren el uso de dos métodos de extensión (Concat - ToDictionary y SelectMany - ToDictionary) y, por lo tanto, se repiten dos veces. Si usted está haciendo esto para optimizar su código, que será más rápido para hacer un bucle sobre el diccionario de B y añadir su contenido a diccionario A.
Editar: Después de investigaciones adicionales, habría sólo se produce la operación de concatenación durante el ToDictionary llamar, pero sigo pensando que un método de extensión personalizado sería más eficiente.
Si desea reducir el tamaño de su código, a continuación, sólo hacer un método de extensión:
public static class DictionaryExtensions
{
public static IDictionary<TKey,TVal> Merge<TKey,TVal>(this IDictionary<TKey,TVal> dictA, IDictionary<TKey,TVal> dictB)
{
IDictionary<TKey,TVal> output = new Dictionary<TKey,TVal>(dictA);
foreach (KeyValuePair<TKey,TVal> pair in dictB)
{
// TODO: Check for collisions?
output.Add(pair.Key, Pair.Value);
}
return output;
}
}
A continuación, se puede utilizar mediante la importación ('utilizar') el espacio de nombres DictionaryExtensions y la escritura:
IDictionary<string,objet> output = dictA.Merge(dictB);
He hecho que el método actúe como si los objetos fueran inmutables, pero podría modificarlo fácilmente para que no devuelva un nuevo diccionario y simplemente se fusione con dictA.
var d3 = d1.Concat(d2).ToDictionary(x => x.Key, x => x.Value);
Esto es exactamente lo mismo que la respuesta de Bruno. –
Simplefied pero la misma respuesta sí, no es una razón para rechazar – RvdK
Lo siento pero publiqué antes de que bruno actualizara su respuesta para incluir la llamada a ToDictionary - anteriormente el código devolvía un IEnumerable
- 1. Combinar dos diccionarios con LINQ
- 2. Combinar diccionarios de recursos
- 3. Cómo combinar dos hash sin claves nuevas
- 4. Combinar dos listas sin duplicados
- 5. Cómo combinar las listas de diccionarios
- 6. combinar varios diccionarios en un solo diccionario
- 7. ¿Cómo combinar dos NSString?
- 8. ¿Combinar diccionarios anidados, por claves anidadas?
- 9. Cómo combinar dos imágenes sin perder intensidad en opencv
- 10. Combinar dos (o más) PDF's
- 11. ¿Cómo puedo combinar diccionarios con las mismas claves en python?
- 12. Combinar dos mapas STL
- 13. jQuery combinar dos objetos
- 14. ¿Cómo puedo hacer un bucle foreach usando diccionarios php?
- 15. Mostrar las diferencias sin combinar para dos confirmaciones en git
- 16. Git caminos sin combinar
- 17. Cómo combinar dos archivos mp3 en uno (combinar/unir)
- 18. Combinar dos UIImages
- 19. combinar dos matrices
- 20. Combinar dos repositorios (proyecto original y cambiada proyecto sin historia)
- 21. Sin has_key() para Python 3 diccionarios
- 22. C# matriz Combinar Sin duplicados
- 23. La comparación de dos Diccionarios en C#
- 24. ¿Cómo combinar dos fechas en JavaScript?
- 25. ¿Cómo combinar dos proyectos en Mercurial?
- 26. ¿Cómo combinar dos BST de manera eficiente?
- 27. ¿Cómo combinar dos valores __m128 en __m256?
- 28. ¿Cómo combinar dos tablas en una consulta?
- 29. ¿Cómo combinar dos listas usando LINQ?
- 30. Cómo combinar dos ámbitos con O
Parece que el nombre de tipo en su pregunta ha desaparecido sin previo aviso. – dommer
si está buscando una fusión, debe consultar: http://stackoverflow.com/questions/294138/merging-dictionaries-in-c – annakata