有效识别第一组中的任何项目是否与第二组中的任何项目匹配

时间:2010-11-25 14:51:11

标签: linq .net-4.0

我有两个代表字符串列表的IEnumerable<string>。我想看看第一组中的任何元素是否与第二组中的任何元素匹配。目前我有一些看起来像这样的东西:

firstSet.Intersect(secondSet).Count() > 0

然而,在我看来,效率相当低,因为它会产生一个匹配的元素列表,然后将它们全部计算在内。然后我可以测试看计数是否大于零。我不关心哪个匹配,多少匹配,只是两个集合中的任何元素匹配。有没有像我firstSet.AnyMatch(secondSet)那样的东西?

有没有更有效的表达方式?

1 个答案:

答案 0 :(得分:3)

改为使用Any

if (firstSet.Intersect(secondSet).Any())

我相信这将首先构建 second 集合的哈希集(完整地),然后迭代第一个集合,直到找到匹配或用完要测试的元素。您可能希望在计算出firstSetsecondSet的哪个方向时牢记这一点。

编辑:只是重复评论中的内容...如果您知道(比方说)firstSetHashSet<string>,那么您应该使用Overlaps:< / p>

HashSet<string> firstHashSet = (HashSet<string>) firstSet;
if (firstHashSet.Overlaps(secondSet))
{
    ...
}
相关问题