C#合并两个可以处理不同值的枚举

时间:2017-02-10 13:15:52

标签: c# .net linq ienumerable

警告:在完成此操作之前,您可能需要咖啡

我有一个函数可以将两个枚举合并为一个。这是代码:

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个项目,其中每个项目可以包含一组不明显的元组。

我正在寻找解决此问题的方法。

我希望这很清楚,非常感谢你能够阅读所有问题!

0 个答案:

没有答案