警告:在完成此操作之前,您可能需要咖啡
我有一个函数可以将两个枚举合并为一个。这是代码:
private IEnumerable<IGrouping<int, IGrouping<Tuple<string, double?>, MyClassTupleAndRow>>> MergeTwoGroupsOfKeyTypes(
IEnumerable<IGrouping<int, IGrouping<Tuple<string, double?>, MyClassTupleAndRow>>> firstGroup,
IEnumerable<IGrouping<int, IGrouping<Tuple<string, double?>, MyClassTupleAndRow>>> secondGroup)
{
// Here merge and resolve the "distinct problem"
}
MyClassTupleAndRow:
class MyClassTupleAndRow
{
Tuple<string, double?> Tuple;
int Row;
}
我会尝试总结一下这个问题:
我有一个元组的集合。这些元组中的每一个都代表一行,所以我创建了这个MyClassTupleAndRow
结构。这些元组并不明显,所以我可以在不同的行中使用相同的元组。
我需要使用元组作为键对MyClassTupleAndRow
枚举进行分组。所以我得到的是IGrouping<Tuple<string, double?>, MyClassTupleAndRow>>
。通过这种方式,集合的每个元素都是不同的,给定元组作为键,我可以看到有多少MyClassTupleAndRow
类具有相同的元组。
另外,我有多个这些分组集合(由于与程序要求相关的原因,我需要创建给定数量元素的块)。
IGrouping<Tuple<string, double?>, MyClassTupleAndRow>>
的每个块都需要按元组的类型进行分组。对于分组,我使用int
作为键,我有4种可能类型的元组(1,2,3和4),具体取决于此处不相关的条件。所以在分组之后,我获得了<IGrouping<int, IGrouping<Tuple<string, double?>, MyClassTupleAndRow>>>
。
所以,最终,我有两个IEnumerable这些集合。
现在重点是如何合并其中的两个子组(由Tuple one分组)是不同元素的集合?
我的意思是,我可以通过这种方式轻松合并这两个项目:
var mergedWithPreviousGroup = firstGroup
.Union(secondGroup)
// Use select many to flat the groups and than regroup them using the key selector (4 groups: 1,2,3,4)
.SelectMany()
.GroupBy(/*KeySelectorHere*/);
但是,如果我这样做,我将获得一组4个项目,其中每个项目可以包含一组不明显的元组。
我正在寻找解决此问题的方法。
我希望这很清楚,非常感谢你能够阅读所有问题!