ホームページ >バックエンド開発 >C++ >リストを定義されたサイズの小さなサブリストに効率的に分割するにはどうすればよいですか?

リストを定義されたサイズの小さなサブリストに効率的に分割するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-18 04:26:08526ブラウズ

How to Efficiently Split a List into Smaller Sublists of a Defined Size?

リストを指定されたサイズのサブリストに分割します

この記事では、リストを指定したサイズのサブリストに分割する方法を紹介し、2 つの効率的な方法を提供します。

方法 1: 拡張メソッドを使用する

次のコードは、拡張メソッドを使用してリスト分割を実装する方法を示しています。

<code class="language-csharp">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>

使用法: リストの ChunkBy メソッドを直接呼び出し、必要なブロック サイズをパラメーターとして渡します。たとえば、18 個の要素のリストを 5 個の要素のチャンクに分割します。

<code class="language-csharp">List<List<int>> chunks = myList.ChunkBy(5);</code>

結果は、それぞれ 5 つの要素を含む 4 つのサブリストのリストになります。

方法 2: ループを使用する

もう 1 つの方法は、単純なループを使用することです:

<code class="language-csharp">public static List<List<T>> SplitList<T>(List<T> list, int chunkSize)
{
    List<List<T>> chunks = new List<List<T>>();

    while (list.Count > 0)
    {
        List<T> chunk = new List<T>(chunkSize);
        for (int i = 0; i < chunkSize && list.Count > 0; i++)
        {
            chunk.Add(list[0]);
            list.RemoveAt(0);
        }
        chunks.Add(chunk);
    }

    return chunks;
}</code>

このメソッドは、リストと必要なチャンク サイズを引数として受け取り、リストの新しいリストを作成し、入力リストが空になるまで、新しいサブリストごとに chunkSize 要素を追加しながら入力リストを反復処理します。

どちらの方法でも、リストを指定されたサイズのサブリストに効果的に分割できます。特定のニーズとコーディング スタイルに最も適した方法を選択してください。

以上がリストを定義されたサイズの小さなサブリストに効率的に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。