50,000 を超える項目を含む 2 つの巨大なリストがあり、それらの違いを見つける必要があるとします。具体的には、2 つのリストが必要です。1 つは最初のリストには存在するが 2 番目のリストには存在しない項目を含み、もう 1 つは 2 番目のリストには存在するが最初のリストには存在しない項目を含みます。
質問に示されているように、一般的なアプローチは LINQ クエリを使用することです。ただし、このアプローチは大規模なリストでは非効率的です。
Except メソッドを使用した最適化ソリューション
パフォーマンスを向上させるには、Except メソッドを使用できます。
<code>var firstNotSecond = list1.Except(list2).ToList(); var secondNotFirst = list2.Except(list1).ToList();</code>
Except メソッドは、2 つのシーケンス間の差集合を効率的に計算し、O(n) 時間で目的の結果を提供します。ここで、n は大きい方のリストの長さです。これは、LINQ クエリで使用される O(N*M) アプローチよりもはるかに高速です。
結果の結合と重複の処理
結果を結合する必要がある場合は、どちらのリストにも差異が含まれない場合に true を返すメソッドを作成できます。元のコードとは異なり、このメソッドは単一のリスト内で重複要素を 1 回だけ報告することに注意してください。
<code>return !firstNotSecond.Any() && !secondNotFirst.Any();</code>
結論
Except メソッドを使用すると、大規模な汎用リストの差異を比較するためのより高速でリソース効率の高い方法が提供され、質問で提起されたパフォーマンスの問題に対処できます。
以上が2 つの非常に大きなリスト間の違いを効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。