大きなリスト内の差異を効率的に比較するための戦略
大規模なリストを操作する場合、相違点の比較は非常にリソースを消費する可能性があります。 LINQ の Contains()
メソッドは一般的な方法ですが、大規模なデータ セットに対しては非効率的です。より良い解決策は、Except()
メソッドを使用することです。
Except() メソッドを使用します
Except()
メソッドは IEnumerable
に対して動作し、あるリストには存在するが別のリストには存在しない要素を検索します。 Except()
を両方のリストに適用すると、2 つの新しいリストが得られます:
firstNotSecond
: 最初のリストにはあるが 2 番目のリストには欠けている要素が含まれています。 secondNotFirst
: 最初のリストにはない 2 番目のリストの要素が含まれています。 この方法は、Contains()
チェックを使用するよりもはるかに高速です。例:
<code class="language-csharp">var firstNotSecond = list1.Except(list2).ToList(); var secondNotFirst = list2.Except(list1).ToList();</code>
結果が統合されました
必要に応じて、結果を 1 つのステートメントに結合できます。
<code class="language-csharp">return !firstNotSecond.Any() && !secondNotFirst.Any();</code>
このステートメントは、2 つの入力リストにまったく同じ要素が含まれている場合は true
と評価され、そうでない場合は false
と評価されます。
繰り返し要素に関する注意事項
Except()
メソッドは、繰り返される要素を Contains()
メソッドとは異なる方法で処理することに注意してください。元のコードでは、2 番目のリストには存在しない最初のリストの重複要素が複数回報告されました。ただし、Except()
は繰り返される各要素を 1 回だけ報告します。このソリューションを使用する場合は、この違いを考慮する必要があります。
以上がC# で 2 つの巨大なリストの相違点を効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。