在 C# 中对分组的 KeyValuePair 列表中的公共值进行相交

Intersect the common values from a grouped KeyValuePair list in C#

我有一个由 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),并将它们添加到整数数组中。使用此示例,Id 应分组为 100、101 和 102。然后,我只需要提取所有组共有的值。

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

{ 1, 2 }

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

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

这是一种可以考虑的方法:

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 相同,那么它们一定都在那里。