Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menghasilkan semua kombinasi watak dan bilangan bulat yang mungkin dari dua tatasusunan menggunakan Linq?

Bagaimana untuk menghasilkan semua kombinasi watak dan bilangan bulat yang mungkin dari dua tatasusunan menggunakan Linq?

Mary-Kate Olsen
Lepaskan: 2025-01-31 05:21:38
asal
785 orang telah melayarinya

How to Generate All Possible Combinations of Characters and Integers from Two Arrays Using LINQ?

menghasilkan semua kombinasi yang mungkin

Penerangan Masalah

Berikan dua array, Array1 mengandungi aksara, dan Array2 mengandungi integer. Gabungan ini harus melintasi semua yang mungkin i, j, k, dan lain -lain. Nilai -nilai ini ditentukan oleh unsur -unsur yang sepadan dalam Array2.

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.

pengumpulan Descartes

Kod berikut mentakrifkan kaedah lanjutan

, ia melaksanakan pengumpulan slidel bagi mana -mana urutan nombor:

CartesianProduct menghasilkan gabungan rentetan

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 })
    );
}
Salin selepas log masuk
Sebaik sahaja kita mempunyai kaedah

, rentetan format pemformatan menjadi sangat mudah:

CartesianProduct Dalam contoh ini, pembolehubah

mengandungi urutan urutan rentetan, masing -masing mewakili gabungan garis.
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 + ")");
Salin selepas log masuk

gabungan output result untuk output kombinasi yang dinyatakan dalam perihalan soalan, kita boleh menggunakan kitaran mudah:

Dengan menggunakan kaedah ke julat Descartes dan pelbagai watak asal dari jarak, kita dapat menghasilkan semua kombinasi elemen yang mungkin.

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!

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