Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Membahagikan Senarai dengan Cekap kepada Subsenarai Kecil bagi Saiz Tertentu?

Bagaimanakah Saya Boleh Membahagikan Senarai dengan Cekap kepada Subsenarai Kecil bagi Saiz Tertentu?

Linda Hamilton
Lepaskan: 2025-01-18 04:36:10
asal
518 orang telah melayarinya

How Can I Efficiently Split a List into Smaller Sublists of a Specific Size?

Pisah senarai kepada subunit saiz yang ditentukan

Artikel ini menyelesaikan masalah biasa: cara membahagikan senarai yang diberikan kepada berbilang subsenarai yang lebih kecil, setiap satu mengandungi bilangan elemen yang dipratentukan. Kaedah sedia ada selalunya menghasilkan saiz subsenarai yang lebih besar daripada yang dijangkakan.

Untuk menyelesaikan masalah ini, kami mengesyorkan menggunakan kaedah sambungan yang mampu membahagikan senarai sumber kepada subsenarai saiz yang ditentukan. Kaedah ini dinamakan ChunkBy dan ia memanfaatkan keupayaan pengagregatan dan unjuran LINQ untuk mencapai hasil yang diinginkan.

Sila lihat coretan kod berikut:

<code class="language-csharp">/// <summary>
/// 列表辅助方法。
/// </summary>
public static class ListExtensions
{
    public static List<List<T>> ChunkBy<T>(this List<T> source, int chunkSize) 
    {
        return source
            .Select((x, i) => new { Index = i, Value = x })
            .GroupBy(x => x.Index / chunkSize)
            .Select(x => x.Select(v => v.Value).ToList())
            .ToList();
    }
}</code>
Salin selepas log masuk

Kaedah ini berulang ke atas elemen senarai sumber dan mengaitkan setiap elemen dengan indeksnya. Ia kemudian mengumpulkan elemen berdasarkan indeks elemen dibahagikan dengan saiz blok. Akhir sekali, ia menayangkan kumpulan ke dalam subsenarai yang mengandungi nilai elemen.

Sebagai contoh, jika senarai 18 item dibahagikan kepada subsenarai 5 elemen setiap satu, hasilnya akan menjadi senarai 4 subsenarai yang diedarkan seperti berikut: 5-5-5-3.

Nota: Dalam .NET 6, penambahbaikan LINQ akan memudahkan pemisahan, seperti yang ditunjukkan dalam contoh berikut:

<code class="language-csharp">const int PAGE_SIZE = 5;

IEnumerable<Movie[]> chunks = movies.Chunk(PAGE_SIZE);</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membahagikan Senarai dengan Cekap kepada Subsenarai Kecil bagi Saiz Tertentu?. 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