50

2 つのコレクションに少なくとも 1 つの共通要素があるかどうかを確認する方法が Linq にあるかどうか疑問に思っています。私は次のようなものを期待します:

var listA = new List<int>() { some numbers };
var listB = new List<int>() { some numbers, potentially also in list A };

bool hasSameElements = listA.hasMatchingElements(listB);

Linq に存在しますか、それともカスタム メソッドを作成する必要がありますか?

Intersect メソッドについては知っていますが、これは交差セット全体を生成しませんか? 2 つのコレクションが交差するかどうかを確認することにのみ関心があります。特に大規模なコレクションでは、セット全体を生成するのは無駄に思えます。

4

1 に答える 1

106

あなたが望むように聞こえます:

bool hasSameElements = listA.Intersect(listB).Any();

編集:コメントに記載されているように、Intersect遅延評価を使用します。結果から最初の要素が読み取られるまで、すべての実行が延期されます。その時点で、すべてをセットにロードし、生成する結果が見つかるまでlistBストリーミングします。listAその時点で、Any()が戻るtrueので、それ以上の作業は行われません。詳細については、Edulinq の投稿をIntersect参照してください。

于 2012-09-25T13:40:08.913 に答える