我想把一个 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>
。此外,那个问题要求最后一个子序列填充。这两个问题密切相关,但并不相同。