基于键和值的词典交集

时间:2015-04-29 10:03:19

标签: c# .net generics dictionary

我想要执行交叉的几个字典。 两个词典可能具有相同键的不同值列表。

示例:

Dictionary<int, List<int>> Primary = new Dictionary<int, List<int>>();
Primary.Add(1, new List<int>());
Primary[1].Add(5);
Primary[1].Add(6);
Primary[1].Add(7);

Primary.Add(2, new List<int>());
Primary[2].Add(5);

Dictionary<int, List<int>> Secondary = new Dictionary<int, List<int>>();
Secondary.Add(1, new List<int>());
Secondary[1].Add(6);
Secondary[1].Add(7);
Secondary[1].Add(8);

Secondary.Add(3, new List<int>());
Secondary[3].Add(5);

所以我希望结果字典只包含:

  

[1],[表&LT; 6,7&GT;]

我怎样才能做到这一点?我希望交集的实际数据结构是以下形式:

Dictionary<long, SortedList<int,List<long>>>

1 个答案:

答案 0 :(得分:2)

您可以按如下方式实现:

var result = Primary.Keys.Intersect(Secondary.Keys)
                 .ToDictionary(key => key,
                               key => Primary[key].Intersect(Secondary[key]).ToList());

将结果转换为Dictionary<long, SortedList<int,List<long>>>应该很容易。