Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Cekap Mencari Semua Gabungan Elemen Array dalam 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!