9

Hi I have two dictionaries of next type:

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

The ClusterPatternCommonMetadata object looks like:

int ChunkQuantity { get; set; }

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

First I need the way to find keys of PatternMetaData that is exists in two dictionaries. I find this way:

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

Then I need to find common values of the founded keys...

Is there is the fast way (lambda, linq, etc) in order to do such operation

Thanks

AlexBerd
  • 1,368
  • 2
  • 18
  • 39
  • Are you looking for just matching keys or matching key/values? Related question: http://stackoverflow.com/questions/3804367/testing-for-equality-between-dictionaries-in-c-sharp – deepee1 May 14 '12 at 16:03

2 Answers2

15

This is called intersection.

You can get the keys using

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

If you want to find equal keys and values that are contained within both dictionaries then just

var equalDictionarys = dictionary1.Intersect(dictionary2);
AlanFoster
  • 8,156
  • 5
  • 35
  • 52
6

You can also get the whole Dictionary items which have common keys:

var commonDictionaryItems = Dic1.Where(d => Dic2.ContainsKey(d.Key)).ToList();
mashta gidi
  • 849
  • 1
  • 10
  • 30