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