我有两个代表字符串列表的IEnumerable<string>
。我想看看第一组中的任何元素是否与第二组中的任何元素匹配。目前我有一些看起来像这样的东西:
firstSet.Intersect(secondSet).Count() > 0
然而,在我看来,效率相当低,因为它会产生一个匹配的元素列表,然后将它们全部计算在内。然后我可以测试看计数是否大于零。我不关心哪个匹配,多少匹配,只是两个集合中的任何元素匹配。有没有像我firstSet.AnyMatch(secondSet)
那样的东西?
有没有更有效的表达方式?
答案 0 :(得分:3)
改为使用Any
:
if (firstSet.Intersect(secondSet).Any())
我相信这将首先构建 second 集合的哈希集(完整地),然后迭代第一个集合,直到找到匹配或用完要测试的元素。您可能希望在计算出firstSet
和secondSet
的哪个方向时牢记这一点。
编辑:只是重复评论中的内容...如果您知道(比方说)firstSet
是HashSet<string>
,那么您应该使用Overlaps
:< / p>
HashSet<string> firstHashSet = (HashSet<string>) firstSet;
if (firstHashSet.Overlaps(secondSet))
{
...
}