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
Linda Hamiltonasal
2025-01-18 04:36:10519semak imbas

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>

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>

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!

Kenyataan:
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