ホームページ >バックエンド開発 >C++ >C# で 2 つのリスト オブジェクトを効率的に比較して内容が等しいかどうかを確認するにはどうすればよいですか?

C# で 2 つのリスト オブジェクトを効率的に比較して内容が等しいかどうかを確認するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-21 07:41:10461ブラウズ

How Can I Efficiently Compare Two List Objects for Content Equality in C#?

C# の List オブジェクトの内容を比較して、それらが等しいかどうかを確認します

2 つの List オブジェクトを比較する場合、要素の順序に関係なく、それらのオブジェクトに同じ要素が含まれているかどうかを判断する必要があることがよくあります。ここで疑問が生じます。C# にはこの種の比較用の組み込み関数が提供されていますか?

要素の順序が重要でない場合は、比較する前に両方のリストを並べ替えるのが簡単な方法です。これは、次のコードを使用して実現できます:

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

また、パフォーマンスを向上させ、IEquatable を実装するが IComparable を実装しない型と互換性を持たせるには、次のメソッドを使用できます。

<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)
    {
        if (cnt.ContainsKey(s))
        {
            cnt[s]++;
        }
        else
        {
            cnt.Add(s, 1);
        }
    }

    foreach (T s in list2)
    {
        if (cnt.ContainsKey(s))
        {
            cnt[s]--;
        }
        else
        {
            return false;
        }
    }

    return cnt.Values.All(c => c == 0);
}</code>

キーとして使用されるデータ型がデフォルトで等価比較をサポートしていない場合は、パラメータとして等価コンパレーターを取る上記の関数の別のバージョンを使用できます。

<code class="language-csharp">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer)
{
    var cnt = new Dictionary<T, int>(comparer);

    //其余代码保持不变
}</code>

以上がC# で 2 つのリスト オブジェクトを効率的に比較して内容が等しいかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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