ホームページ > バックエンド開発 > C++ > 要素の順序を無視して 2 つのリストが等しいかどうかを比較するにはどうすればよいですか?

要素の順序を無視して 2 つのリストが等しいかどうかを比較するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-21 07:46:13
オリジナル
485 人が閲覧しました

How Can I Compare Two Lists for Equality, Ignoring Element Order?

リストの等価性比較では要素の順序を無視します

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

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