在C#中将已分组的KeyValuePair列表中的公共值相交

时间:2018-06-08 12:02:09

标签: c# arrays int intersect

我有一个由Id(Item1)和Value(Item2)组成的元组列表,如下所示:

var tupleList = new List<Tuple<int, int>>
{
   Tuple.Create( 100, 1 ),
   Tuple.Create( 100, 1 ),
   Tuple.Create( 100, 2 ),
   Tuple.Create( 101, 1 ),
   Tuple.Create( 101, 2 ),
   Tuple.Create( 101, 3 ),
   Tuple.Create( 102, 1 ),
   Tuple.Create( 102, 2 ),
   Tuple.Create( 102, 3 )
 };

目标是在每个分组的Id(Item1)之间找到公共值(Item2)并将它们添加到整数数组中。使用此示例,Ids应分组为100,101和102.然后,我只需要提取所有组共有的值。

换句话说,使用上面的例子,最终输出将是:

{ 1, 2 }

另请注意,我为100添加了一个重复条目作为测试 - 不确定是否有必要。

我希望这是有道理的。抱歉没有提供任何代码,因为我甚至不确定如何开始编码。

1 个答案:

答案 0 :(得分:1)

这是一种考虑的方法:

var count = tupleList.Select(z => z.Item1).Distinct().Count();
var allThere = tupleList
    .GroupBy(z => z.Item2)
    .Where(z => z.Distinct().Count() == count)
    .Select(z => z.Key)
    .ToList();

第一行获取唯一Item1值的数量。

第二行按Item2对原始输入进行分组,然后计算行数。如果计数与count相同,那么他们必须全部在那里。