以下を有する:
public List<int> List1 { get; set; }
...
var x = GiveMeObject(); // x.List2 --> each element on list2 has an Id (int).
...
bool containsAtLeastOne = ???
list1 の少なくとも 1 つの要素が list2 にあるかどうかを確認するための (linq での) 最も簡単/最速/最短の方法は何ですか?
ありがとう
bool containsAtLeastOne = x.List2.Any(li => List1.Contains(li.Id));
bool containsAtLeastOne = List1.Intersect(x.List2.Select(e => e.Id)).Any()
コレクションが大きくなっている場合は、 の代わりに を使用する必要があります。Intersect
は少なくとも と同じくらい高速です。コレクションによっては、すぐに遅くなる可能性があります。Contains
Intersect
Contains
Contains
コレクションが非常に小さい (< 1000 要素) 場合、この違いはおそらく問題になりません。
非LINQの方法とさらにいくつかのコード行を気にしない場合は、次を使用できます
var tmp = new HashSet<int>(x.List2.Select(e => e.ID));
tmp.IntersectWith(list1);
bool containsAtLeastOne = tmp.Any();
これはおそらくLINQアプローチよりも高速です。