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
Lepaskan: 2025-01-19 23:07:08
asal
651 orang telah melayarinya

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

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

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

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

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan