Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membandingkan Dua Objek Senarai dengan Cekap untuk Kesamaan Kandungan dalam C#?

Bagaimanakah Saya Boleh Membandingkan Dua Objek Senarai dengan Cekap untuk Kesamaan Kandungan dalam C#?

DDD
DDDasal
2025-01-21 07:41:10461semak imbas

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

Bandingkan kandungan List objek dalam C# untuk melihat sama ada ia sama

Apabila membandingkan dua objek Senarai, anda selalunya perlu menentukan sama ada ia mengandungi elemen yang sama, tanpa mengira susunan unsur. Ini menimbulkan persoalan: adakah C# menyediakan fungsi terbina dalam untuk jenis perbandingan ini?

Jika susunan elemen tidak penting, menyusun kedua-dua senarai sebelum membandingkan ialah pendekatan yang mudah. Ini boleh dicapai menggunakan kod berikut:

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

Sebagai alternatif, untuk meningkatkan prestasi dan serasi dengan jenis yang melaksanakan IEquatable tetapi bukan IComparable, anda boleh menggunakan kaedah berikut:

<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>

Jika jenis data yang digunakan sebagai kunci tidak menyokong perbandingan kesamaan secara lalai, anda boleh menggunakan versi lain fungsi di atas yang mengambil pembanding kesamaan sebagai parameter:

<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>

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Dua Objek Senarai dengan Cekap untuk Kesamaan Kandungan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn