C# で同じ要素と出現箇所を持つ順序なしリストを効率的に比較します
C# では、要素の順序が重要でない場合、2 つのリストが等しいかどうかを比較するのが困難になることがあります。複数の同一の要素を含むリストの場合、等価性の判断はより複雑になります。
List
並べ替え後の比較
簡単なアプローチは、比較する前に両方のリストを並べ替えることです。次のコード スニペットを使用すると、要素の等価性と順序の独立性を確認できます:
<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 サイトの他の関連記事を参照してください。