Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Cekap Mencari Semua Gabungan Elemen Array dalam C#?

Bagaimana untuk Cekap Mencari Semua Gabungan Elemen Array dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-19 23:07:08604semak imbas

How to Efficiently Find All Combinations of Array Elements in C#?

Cari semua gabungan elemen tatasusunan C# dengan cekap

Apabila bekerja dengan elemen tatasusunan, adalah berguna untuk mengekstrak semua kemungkinan gabungan elemen. Tugas ini sering muncul dalam medan seperti analisis data dan pengoptimuman gabungan.

Permutasi dan gabungan elemen berulang

Andaikan terdapat tatasusunan [1, 2, 3, 4]. Untuk mencari semua gabungan panjang 2 dengan elemen berulang, anda boleh menggunakan fungsi berikut:

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetPermutationsWithRept<T>(IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetPermutationsWithRept(list, length - 1)
        .SelectMany(t => list, (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>

Fungsi ini mempertimbangkan gabungan yang mengandungi elemen berulang, seperti [1, 1], [1, 2], dsb.

Permutasi dan gabungan (tidak termasuk elemen berulang)

Untuk mengecualikan elemen pendua, gunakan fungsi GetPermutations:

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetPermutations<T>(IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetPermutations(list, length - 1)
        .SelectMany(t => list.Where(o => !t.Contains(o)), (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>

Fungsi ini memastikan gabungan seperti [1, 2], [1, 3] dan [2, 3], tetapi bukan [1, 1].

Kombinasi K dengan elemen berulang

Pertimbangkan untuk mencari gabungan panjang 2 dengan elemen berulang, membenarkan kejadian berbilang elemen:

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetKCombsWithRept<T>(IEnumerable<T> list, int length) where T : IComparable
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetKCombsWithRept(list, length - 1)
        .SelectMany(t => list.Where(o => o.CompareTo(t.Last()) >= 0), (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>

Fungsi ini menjana gabungan seperti [1, 1], [1, 2] dan [2, 2].

Kombinasi K (tidak termasuk elemen berulang)

Untuk gabungan tanpa unsur berulang:

<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetKCombs<T>(IEnumerable<T> list, int length) where T : IComparable
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetKCombs(list, length - 1)
        .SelectMany(t => list.Where(o => o.CompareTo(t.Last()) > 0), (t1, t2) => t1.Concat(new T[1] { t2 }));
}</code>

Fungsi ini menjana gabungan seperti [1, 2], [1, 3] dan [2, 3].

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Semua Gabungan Elemen Array 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