リストの等価性比較では要素の順序を無視します
2 つの List<T>
オブジェクトを比較するときは、通常、リスト内の位置に関係なく、それらの要素が等しいかどうかを確認する必要があります。これを実現する方法をいくつか紹介します。
1. 要素の等価性と出現数
出現回数が同じで同じ要素を含む 2 つのリストが必要な場合は、比較する前に並べ替えることをお勧めします。
<code class="language-csharp">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
2. 最適化方法
特に大規模なリストを処理する場合のパフォーマンスを向上させるには、IEquatable
を実装するだけで済むこのカスタム メソッドを使用できます:
<code class="language-csharp">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2) { var cnt = new Dictionary<T, int>(); foreach (T s in list1) { cnt[s] = cnt.ContainsKey(s) ? cnt[s] + 1 : 1; } foreach (T s in list2) { if (cnt.ContainsKey(s)) { cnt[s]--; } else { return false; } } return cnt.Values.All(c => c == 0); }</code>
3. null 許容型の処理
要素が null 許容型の場合は、辞書のカスタム コンパレータを使用できます。
<code class="language-csharp">var comparer = EqualityComparer<T>.Default; var cnt = new Dictionary<T, int>(comparer);</code>
以上が要素の順序を無視して 2 つのリストが等しいかどうかを比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。