IEnumerable<T>
を取得して、固定サイズのチャンクに分割したいと思います。
私はこれを持っていますが、すべてのリストの作成/コピーのためにエレガントではないようです:
private static IEnumerable<IEnumerable<T>> Partition<T>(this IEnumerable<T> items, int partitionSize)
{
List<T> partition = new List<T>(partitionSize);
foreach (T item in items)
{
partition.Add(item);
if (partition.Count == partitionSize)
{
yield return partition;
partition = new List<T>(partitionSize);
}
}
// Cope with items.Count % partitionSize != 0
if (partition.Count > 0) yield return partition;
}
もっと慣用的なものはありますか?
編集:これは、配列をサブシーケンス配列の配列に分割する複製としてマークされていますが、そうではありません-その質問は配列の分割を扱っていますが、これは約IEnumerable<T>
です。さらに、その質問では、最後のサブシーケンスが埋め込まれている必要があります。2つの質問は密接に関連していますが、同じではありません。