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
Lepaskan: 2025-01-21 07:41:10
asal
528 orang telah melayarinya

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:

Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))
Salin selepas log masuk

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

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);
}
Salin selepas log masuk

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:

public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer)
{
    var cnt = new Dictionary<T, int>(comparer);

    //其余代码保持不变
}
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan