2010-11-25 30 views
1

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

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

然而,在我看来是相当低效的,因为它会产生相匹配的元素列表,然后计算它们。然后我可以测试一下计数是否大于零。我不关心哪一场比赛,有多少场比赛,只要两组中的任何一个元素相匹配。有没有像我错过的firstSet.AnyMatch(secondSet)

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

回答

3

使用Any代替:

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

我相信,这将生成哈希集收集的第一个(在全部),然后遍历第一套,直到它找到一个匹配或用完要测试的元素。在考虑将firstSetsecondSet放在哪个位置时,您不妨考虑这一点。

编辑:只是重复什么已经在评论...如果你知道(比如说)firstSetHashSet<string>,那么你应该投给它,并使用Overlaps

HashSet<string> firstHashSet = (HashSet<string>) firstSet; 
if (firstHashSet.Overlaps(secondSet)) 
{ 
    ... 
} 
+0

难道是正确的假设如果底层类型是HashSet 已经不会重建它? – 2010-11-25 14:58:40

相关问题