[编辑] 重新阅读编辑后的 OP 后,我意识到这并不能满足现在的要求。这将在每个第 n 个目标上拆分;OP 希望在第 n 个目标之后拆分每个目标。
无论如何,我将把它留在这里以供后代使用。
如果您使用的是MoreLinq 扩展,您可以利用它的Batch
方法。
您的代码将如下所示:
string text = "1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12\t13\t14\t15\t16\t17";
var splits = text.Split('\t').Batch(5);
foreach (var split in splits)
Console.WriteLine(string.Join("", split));
我可能只是使用 Oded 的实现,但我想我会发布这个作为替代方法。
的实现Batch()
看起来像这样:
public static class EnumerableExt
{
public static IEnumerable<IEnumerable<TSource>> Batch<TSource>(this IEnumerable<TSource> source, int size)
{
TSource[] bucket = null;
var count = 0;
foreach (var item in source)
{
if (bucket == null)
bucket = new TSource[size];
bucket[count++] = item;
if (count != size)
continue;
yield return bucket;
bucket = null;
count = 0;
}
if (bucket != null && count > 0)
yield return bucket.Take(count);
}
}