1. ホーム
  2. c#

[解決済み] LINQリング。巨大なコレクションに対するAny()とContains()の比較

2022-05-14 19:14:49

質問

巨大なオブジェクトのコレクションがある場合、次のようなパフォーマンスの違いはあるでしょうか?

コレクション.Contains :

myCollection.Contains(myElement)

Enumerable.Any :

myCollection.Any(currentElement => currentElement == myElement)

どのように解決するのですか?

Contains() はインスタンスメソッドであり、その性能はコレクション自体に大きく依存します。例えば Contains() の上に List は O(n) であり、一方 Contains() の上で HashSet は O(1) です。

Any() は拡張メソッドであり、単純にコレクションを通過し、すべてのオブジェクトにデリゲートを適用します。そのため、計算量はO(n)となります。

Any() は、デリゲートを渡すことができるので、より柔軟です。 Contains() はオブジェクトしか受け取れません。