リストを指定されたサイズのサブユニットに分割します
この記事では、指定されたリストを、それぞれに事前定義された数の要素が含まれる複数の小さなサブリストに分割する方法という一般的な問題を解決します。既存のメソッドでは、サブリストのサイズが予想よりも大きくなることがよくあります。
この問題を解決するには、ソース リストを指定したサイズのサブリストに分割できる拡張メソッドを使用することをお勧めします。このメソッドは ChunkBy
という名前で、LINQ の集計機能と射影機能を活用して、目的の結果を実現します。
次のコード スニペットをご覧ください:
<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>
このメソッドはソース リストの要素を反復処理し、各要素をそのインデックスに関連付けます。次に、要素インデックスをブロック サイズで割った値に基づいて要素をグループ化します。最後に、要素の値を含むサブリストにグループを投影します。
たとえば、18 項目のリストがそれぞれ 5 要素のサブリストに分割された場合、結果は次のように分散された 4 つのサブリストのリストになります: 5-5-5-3。
注: .NET 6 では、次の例に示すように、LINQ の改善により分割が容易になります。
以上がリストを特定のサイズの小さなサブリストに効率的に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。