在嵌套集合中寻找equals

时间:2017-11-06 16:47:16

标签: c# linq

我有两个IEnumerable个集合(BaseCollectionA& BaseCollectionB)。

这些集合的项目是其他集合(SubCollectionA& SubCollectionB)。 SubCollections可以在其中包含一个或多个集合项(对象)。 SubCollections包含具有我的属性的对象(MyObject);

我想比较两个BaseCollections及其SubCollections' items(MyObjects)表示重复项,即当BaseCollectionA的任何SubCollections中的项目(MyObject)等于BaseCollectionB的任何SubCollections中的项目(MyObject)时返回 true。

IEnumerable<T> BaseCollectionA
{
    IEnumerable<T> SubCollectionA1,
    IEnumerable<T> SubCollectionA2,
    IEnumerable<T> SubCollectionA3,
    ...
}

IEnumerable<T> BaseCollectionB
{
    IEnumerable<T> SubCollectionB1,
    IEnumerable<T> SubCollectionB2,
    IEnumerable<T> SubCollectionB3,
    ...
}

在我的情况下,性能非常重要,因此最好有最快的解决方案。另外,我更喜欢在方法语法中编写linq。

非常感谢提前。

1 个答案:

答案 0 :(得分:-1)

var allTsInA = baseCollectionA.Concat(baseCollectionA.SubCollectionA1)
                              .Concat(baseCollectionA.SubCollectionA2)
                              .Concat(baseCollectionA.SubCollectionA3);

var allTsInB = /* same for B */;

var result = allTsInA.Any(allTsInB.Contains);

如果你多次使用字典或HashSets,你可能希望通过使用Dictionaries或HashSets来改进它,而不是再次迭代。