2010-11-25 32 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

相關問題