2012-05-14 17 views
5

Hola tengo dos diccionarios de tipo siguiente:Obtener claves y valores comunes de los dos diccionarios

SortedDictionary<string, ClusterPatternCommonMetadata> PatternMetaData { get; set; } 

El objeto ClusterPatternCommonMetadata parece:

int ChunkQuantity { get; set; } 

SortedDictionary<int, int> ChunkOccurrences { get; set; } 

Primero necesito el camino para encontrar las claves de PatternMetaData que existe en dos diccionarios. Encuentro esta manera:

List<string> commonKeysString= 
      vector.PatternMetaData.Keys.Intersect(currentFindingVector.PatternMetaData.Keys) 

entonces necesito para encontrar valores comunes de las teclas fundadas ...

¿Hay es la manera rápida (lambda, LINQ, etc) con el fin de hacer tal operación

Gracias

+0

¿Está buscando simplemente las llaves coincidentes o las llaves/valores coincidentes? Pregunta relacionada: http://stackoverflow.com/questions/3804367/testing-for-equality-between-dictionaries-in-c-sharp – deepee1

Respuesta

9

Esto se llama intersección.

Usted puede obtener las claves usando

var data = dictionary1.Keys.Intersect(dictionary2.Keys) 

Si usted quiere encontrar la igualdad de claves y valores que están contenidos en los dos diccionarios entonces sólo

var equalDictionarys = dictionary1.Intersect(dictionary2); 
+0

Entonces, ¿no hay forma de intersectarse con el diccionario mediante claves y valores de dos diccionarios determinados? – AlexBerd

+0

@AlexanderBerdichevsky Solo para aclarar ... ¿Quieres obtener todos los dictionarys en los que coinciden tanto la clave como el valor? – AlanFoster

+0

Quiero crear un diccionario a partir de dos que en su interior serían las claves comunes y los valores comunes de las claves – AlexBerd

1

También puede obtener el conjunto de los elementos del diccionario, que tiene teclas en común:

var commonDictionaryItems = Dic1.Where(d => Dic2.ContainsKey(d.Key)).ToList(); 
Cuestiones relacionadas