我想把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;
}
还有更惯用的吗?
编辑:虽然这已被标记为Divide array into an array of subsequence array的副本,但它不是 - 该问题涉及拆分数组,而这是关于IEnumerable<T>
. 此外,该问题要求填充最后一个子序列。这两个问题密切相关,但并不相同。