我有两个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。
非常感谢提前。
答案 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来改进它,而不是再次迭代。