Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk menghasilkan semua kombinasi watak dan bilangan bulat yang mungkin dari dua tatasusunan menggunakan Linq?
menghasilkan semua kombinasi yang mungkin
Jawab
Untuk menghasilkan semua kombinasi yang mungkin dengan LINQ, kita boleh menggunakan teknologi yang dipanggil "Descartes". Proses ini melibatkan mewujudkan urutan, yang mengandungi setiap gabungan elemen yang mungkin dari pelbagai urutan input.Kod berikut mentakrifkan kaedah lanjutan
CartesianProduct
menghasilkan gabungan rentetan
<code class="language-csharp">static IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences) { IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() }; return sequences.Aggregate( emptyProduct, (accumulator, sequence) => from accseq in accumulator from item in sequence select accseq.Concat(new[] { item }) ); }</code>Sebaik sahaja kita mempunyai kaedah
CartesianProduct
Dalam contoh ini, pembolehubah
<code class="language-csharp">var arr1 = new[] { "a", "b", "c" }; var arr2 = new[] { 3, 2, 4 }; var result = from cpLine in CartesianProduct( from count in arr2 select Enumerable.Range(1, count).Select(i => i.ToString())) select cpLine.Zip(arr1, (x1, x2) => x2 + "(" + x1 + ")");</code>
gabungan output
result
untuk output kombinasi yang dinyatakan dalam perihalan soalan, kita boleh menggunakan kitaran mudah:
Jawapan Revied ini meningkatkan kejelasan kod dan secara langsung menangani pernyataan privem oleh generasi dalam format "A (i) b (j)".
Atas ialah kandungan terperinci Bagaimana untuk menghasilkan semua kombinasi watak dan bilangan bulat yang mungkin dari dua tatasusunan menggunakan Linq?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!