ホームページ >バックエンド開発 >C++ >C# で重複要素を持つ 2 つの順序なしリストを効率的に比較するにはどうすればよいですか?

C# で重複要素を持つ 2 つの順序なしリストを効率的に比較するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-21 07:57:08378ブラウズ

How Can I Efficiently Compare Two Unordered Lists with Duplicate Elements in C#?

C# で同じ要素と出現箇所を持つ順序なしリストを効率的に比較します

C# では、要素の順序が重要でない場合、2 つのリストが等しいかどうかを比較するのが困難になることがあります。複数の同一の要素を含むリストの場合、等価性の判断はより複雑になります。

List オブジェクト list1 と list2 を比較するタスクを考えます。ここで、各要素の出現数は両方のリストで同じである必要があります。これを行うには、複数段階のアプローチが必要です。

並べ替え後の比較

簡単なアプローチは、比較する前に両方のリストを並べ替えることです。次のコード スニペットを使用すると、要素の等価性と順序の独立性を確認できます:

<code class="language-c#">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>

辞書ベースの比較

パフォーマンスを向上させるには、辞書を利用して要素の出現数をカウントする ScrambledEquals メソッドの使用を検討してください。

<code class="language-c#">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2)</code>

このメソッドは、一意の要素を表すキーと list1 内の各要素の出現数を表す値で満たされた辞書を使用します。次に、list2 を反復処理して、一致する要素の数を減らします。 list2 の要素が辞書内に見つからない場合、またはカウントが一致しない場合、関数は false を返します。最後に、辞書内のすべてのカウントがゼロであることを保証します。これは、両方のリストに同じ出現があることを意味します。

null 許容型の処理

Null 許容型または任意のデータ型を辞書キーとして対応するには、ScrambledEquals メソッドでカスタム コンパレータを提供します。

<code class="language-c#">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer)</code>

この機能を組み合わせることで、要素の順序や数に関係なく効率的にリストを比較することができます。

以上がC# で重複要素を持つ 2 つの順序なしリストを効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。