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

C# でリストを特定のサイズのサブリストに効率的に分割するにはどうすればよいですか?

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

How Can I Efficiently Chunk a List into Sublists of a Specific Size in C#?

C# でリストを指定されたサイズの小さなサブリストに分割する

元の splitList 関数は、リストを 30 個の要素を含む小さなリストに分割することを目的としていました。 ただし、これには欠陥があり、サブリストのサイズが一貫性のないものになってしまいました。

拡張メソッドを使用した改善されたソリューション:

より堅牢なアプローチには、C# 拡張メソッドの作成が含まれます。

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

機能の説明:

この拡張メソッドは、リスト (source) を指定された chunkSize のサブリストに効率的に分割します。 LINQ を利用します:

  1. インデックスと値のペアリング: Select((x, i) => new { Index = i, Value = x }) は、各要素のインデックスと値を含む匿名型を作成します。

  2. チャンクによるグループ化: GroupBy(x => x.Index / chunkSize) は、インデックスを chunkSize で割った値に基づいて要素をグループ化します。 これにより、同じチャンク内の要素が確実にグループ化されます。

  3. リストの作成: Select(x => x.Select(v => v.Value).ToList()) は、各グループを元の要素タイプのリストに変換します。

  4. リストの最終リスト: ToList() は、チャンク化されたサブリストを含む最終リストを作成します。

実際の応用:

このメソッドを使用して、locations という名前のリストからサイズ 30 のサブリストを作成するには:

<code class="language-csharp">List<List<YourElementType>> chunkedLists = locations.ChunkBy(30);</code>

例:

locations に 144 個の要素が含まれる場合、chunkedLists にはサイズ 30、30、30、30、24 の 5 つのサブリストが正しく含まれます。

今後の C# の機能強化:

.NET 6 では、この目的のために組み込みの Chunk メソッドが導入されており、プロセスがさらに簡素化されていることに注意してください。

<code class="language-csharp">const int PAGE_SIZE = 5;
IEnumerable<Movie> chunks = movies.Chunk(PAGE_SIZE);</code>

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

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