ホームページ > バックエンド開発 > C++ > 2 つの非常に大きなリスト間の違いを効率的に見つけるにはどうすればよいですか?

2 つの非常に大きなリスト間の違いを効率的に見つけるにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-14 21:07:44
オリジナル
875 人が閲覧しました

How Can I Efficiently Find Differences Between Two Very Large Lists?

大規模な汎用リストの違いを効率的に比較します

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート