2012-05-11 15 views
18

Duplicar posible:
Merging dictionaries in C#combinar varios diccionarios en un solo diccionario

diccionario 1

"a", "1"
"b", " 2 "

diccionario 2

"c", "3"
"d", "4"

diccionario 3

"e", "5"
"f", "6"

Diccionario combinado

"a", "1"
"b", "2"
"c", "3"
"d", "4"
"e", "5"
"f", "6"

¿Cómo combino los diccionarios 3 anteriores en un único diccionario combinado?

+2

¿Qué debería pasar si tienes claves con diferentes valores? –

+0

Sani..I creó una variable privada de nivel de clase y luego llama a otro diccionario de método privado 1 a la vez para agregarlos al método combinado. No se ve limpio, entonces estoy pidiendo un mejor método aquí. –

+1

¿Puede mostrar cómo se representan actualmente sus diccionarios en el código? – EtherDragon

Respuesta

108
var d1 = new Dictionary<string, int>(); 
var d2 = new Dictionary<string, int>(); 
var d3 = new Dictionary<string, int>(); 

var result = d1.Union(d2).Union(d3).ToDictionary (k => k.Key, v => v.Value); 

EDITAR
Para asegurar que no duplicado uso de claves:

var result = d1.Concat(d2).Concat(d3).GroupBy(d => d.Key) 
      .ToDictionary (d => d.Key, d => d.First().Value); 
+3

Tenga en cuenta que 'ToDictionary' lanzará una excepción en los duplicados – dtb

+0

@dtb no habrá ningún duplicado cuando se use con' union' como en mi respuesta. – Magnus

+0

Magnus ... gracias ... esto es lo que estaba buscando. –

10

Sólo bucle a través de ellos:

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

foreach (var dict in dictionariesToCombine) { 
    foreach (var item in dict) { 
     result.Add(item.Key, item.Value); 
    } 
} 

(Asume dictionariesToCombine es un poco de IEnumerable de los diccionarios de combinar, por ejemplo, una matriz.)

+1

gracias minitech, ¿cómo puedo crear IEnumerable de diccionarios? –

+0

'new Dictionary [] {your, dictionaries, here}' – Ryan

+4

Tenga en cuenta que 'Add' arrojará una excepción en los duplicados – Magnus

Cuestiones relacionadas