Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membandingkan Dua Senarai Tidak Tertib dengan Elemen Pendua dalam C# dengan Cekap?

Bagaimanakah Saya Boleh Membandingkan Dua Senarai Tidak Tertib dengan Elemen Pendua dalam C# dengan Cekap?

Linda Hamilton
Linda Hamiltonasal
2025-01-21 07:57:08325semak imbas

How Can I Efficiently Compare Two Unordered Lists with Duplicate Elements in C#?

Bandingkan senarai tidak tertib dengan cekap dengan elemen dan kejadian yang sama dalam C#

Dalam C#, membandingkan dua senarai untuk kesaksamaan boleh mencabar apabila susunan elemen tidak penting. Untuk senarai yang mengandungi berbilang elemen yang sama, menentukan kesetaraan menjadi lebih kompleks.

Pertimbangkan tugas membandingkan List objek list1 dan list2, dengan bilangan kejadian setiap elemen harus sama dalam kedua-dua senarai. Untuk melakukan ini, pendekatan pelbagai langkah diperlukan.

Perbandingan selepas mengisih

Pendekatan mudah ialah mengisih kedua-dua senarai sebelum membandingkan. Menggunakan coretan kod berikut, anda boleh menyemak kesamaan elemen dan menentukan kebebasan:

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

Perbandingan berasaskan kamus

Untuk meningkatkan prestasi, pertimbangkan untuk menggunakan kaedah ScrambledEquals, yang menggunakan kamus untuk mengira bilangan kejadian unsur:

<code class="language-c#">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2)</code>

Kaedah ini menggunakan kamus yang diisi dengan kekunci yang mewakili elemen unik dan nilai yang mewakili bilangan kejadian setiap elemen dalam senarai1. Kemudian, ia berulang melalui senarai2, mengurangkan kiraan elemen padanan. Jika mana-mana elemen dalam list2 tidak ditemui dalam kamus atau kiraan tidak sepadan, fungsi mengembalikan palsu. Akhir sekali, ia memastikan bahawa semua kiraan dalam kamus adalah sifar, yang bermaksud terdapat kejadian yang sama dalam kedua-dua senarai.

Mengendalikan jenis nullable

Untuk menampung jenis nullable atau mana-mana jenis data sebagai kunci kamus, sediakan pembanding tersuai dalam kaedah ScrambledEquals:

<code class="language-c#">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer)</code>

Dengan menggabungkan ciri ini, anda boleh membandingkan senarai dengan cekap tanpa mengira susunan dan bilangan elemen.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Dua Senarai Tidak Tertib dengan Elemen Pendua dalam C# dengan Cekap?. 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